機械翻訳について

NULL文字列と空文字列の違いの理解

Groovyでは、値がnullの変数と値が空の文字列の変数との間に微妙な違いがあります。

nullはオブジェクトがないことを表し、空の文字列はゼロ文字を含むString型のオブジェクトです。 2つを比較しようとすると、それらは同じではありません。

たとえば、次の条件付きブロック内のコードは、varAの値(null)がvarBの値(空の文字列)と等しくないため、実行されません。

def varA = null
def varB = '' /* The empty string */
if (varA == varB) {
  // Do something here when varA equals varB
}

この微妙な違いに関連する別の一般的なgotchaは、変数を空の文字列と比較しようとしてもnullかどうかがテストされないことです。 たとえば、varAnull値が空の文字列と等しくないため、次の条件付きブロック内のコードが実行(および実行時にNullPointerExceptionが発生)されます:

def varA = null
if (varA != '') {
  // set varB to the first character in varA
  def varB = varA.charAt(0)
}

文字列変数がnullでも空でもないかどうかをテストするには、「できる」は次のような両方の条件を明示的に記述します:

if (varA != null && varA != '') {
  // Do something when varA is neither null nor empty
}

ただし、Groovyを使用すると、より単純な方法が提供されます。 nullと空の文字列の両方がブールとして解釈されるとfalseに評価されるため、かわりに次を使用できます:

if (varA) {
  // Do something when varA has a non-null and non-empty value
}

varAnullの場合、条件ブロックはスキップされます。 いずれかの条件がブールfalseに評価されるため、varAが空の文字列と等しい場合も同様です。 このよりコンパクトな構文が推奨されるアプローチです。