GroovyのNull-Safe比較演算子の理解
Groovyの比較演算子==および!=がNULLを正常に処理するため、等価比較または不等価比較でのNULL値の保護について心配する必要はありません。
さらに、>、>=、<および<=演算子は、null関連の例外を回避するように設計された「また」ですが、Groovyがこれらの順序依存の比較でnullをどのように処理するかを意識する必要があります。 実際には、null値は自然順序でNULL以外の値よりも小さいため、たとえば次の比較結果を確認します。
|
左側の式 |
オペレータ |
右側式 |
比較結果 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
異なるセマンティクスを持つNULL値フィールドを比較で処理する場合 - たとえば、NULLのMaximumOverdraftAmountフィールドを、スプレッドシート・ユーザーの期待どおりにゼロ(0)であるかのように処理 - 次に、次の例に示すように、比較ロジックの一部としてnvl()関数を使用します:
// Change default comparison semantics for the MaximumOverdraftAmount custom field in
// case its value is null by using nvl() to treat null like zero (0)
if (nvl(MaximumOverdraftAmount,0) < -2000) {
// do something for suspiciously large overdraft amount
}
前述の表に示すように、比較にnvl()関数がない場合、nullのMaximumOverdraftAmount値は常に-2000より小さくなります - デフォルトでは、nullはすべてのものより小さいためです。