私はこれを誰かのコードでよく見ています:nullチェック条件は次のように書かれています:
if (null == value)
それよりも
if (value == null)
null
Javaで演算子の前に置く理由はないと思います。このようにすることには何か利点がありますか?これは単にC++プログラマーが自分のスキルをJavaに誤って適用した場合ですか、それとも私は何か重要なことを見逃していますか?
私はこれを誰かのコードでよく見ています:nullチェック条件は次のように書かれています:
if (null == value)
それよりも
if (value == null)
null
Javaで演算子の前に置く理由はないと思います。このようにすることには何か利点がありますか?これは単にC++プログラマーが自分のスキルをJavaに誤って適用した場合ですか、それとも私は何か重要なことを見逃していますか?
これは、いわゆる「ヨーダ条件」 (項目 1)のケースです。それらを C/C++ で合理化することは可能ですが、Java で使用する理由はありません。
C/C++ では、任意の型の式をif
s およびwhile
s に入れることができます。書き込み
if (var = NULL) // No compile-time error in C/C++
それ以外の
if (var == NULL)
初心者にありがちなミスです。Yoda 条件は、コードを "Yodify" することを犠牲にして、この問題に対処するための救済策であると思われます: C/C++ は代入をトラップしますNULL
if (NULL = var) // Compile-time error
ただし、「逆」NULL
チェックは問題ありません。
if (NULL == var)
if
Java は、 、while
、およびの制御ブロック内の非ブール式をエラーと見なすため、 の代わりにfor
トラップし、エラーをトリガーします。したがって、表現を「よみがえらせる」ことによって可読性をあきらめる理由はありません。var = null
var == null
文字列が 20 よりも長い場合にのみ、文字列の内容を出力したいとします。次のようにします。
if (str != null && str.length() > 20) {
System.out.println(str);
}
これstr != null &&
を省略すると、str
実際にnull
.
の違いについて言及している場合は、
if (str == null) { ... }
と
if (null == str) { ... }
なにもない。
答えはノーだ!Javaでは
絶対に優先する必要はありません!if (null == value)
if (value == null)
のチェックはif (null == value)
、少なくとも Java では少し奇妙です。これは、C および C++ のコード ガイドラインに基づいており、意味があります。
より読みやすいほうが好きif (value == null)
です。
if (value = null)
その理由は、正しいのではなく、C/C++ エラーを回避するためです。if (value == null)
if (null = value)
C/C++ コンパイラを使用すると、エラーがスローされます。
ただし、Java ではif (value = null)
構文エラーになります。
したがって(null == value)
、Java でそれを使用しないでください
何度か読んだ方が良いかもしれません
if( null == someFunction(someParameter, anotherParameter) )
対
if( someFunction(someParameter, anotherParameter) == null )
これは通常、開発者の母国語のアーティファクトです。一部の言語には、null == value
よりも自然にするルールがありますvalue == null
。構文的には、Java と同じです。
チェックしないと、null ポインター例外が発生する可能性があります。
この順序で配置すると、= (代入) と == (等価) を混同しなくなります。
両方
if (a = null)
と
if (a == null)
コンパイルします。ただし、おそらく最初ではなく 2 番目が必要です。
それらをひっくり返すと、
if (null = a)
コンパイルされませんが、
if (null == a)
コンパイルします。
したがって、コンパイル時に小さな、見つけにくいエラーをキャッチできます。
value = null
== を省略した場合などに値を割り当てていないことを確認するためだけに、このコードは正常にコンパイルされ、実行時にのみ識別できますが、null = value
このようにしようとするとコンパイルされません。