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
はすべてのものより小さいためです。