2

私はこれを誰かのコードでよく見ています:nullチェック条件は次のように書かれています:

if (null == value)

それよりも

if (value == null)

nullJavaで演算子の前に置く理由はないと思います。このようにすることには何か利点がありますか?これは単にC++プログラマーが自分のスキルをJavaに誤って適用した場合ですか、それとも私は何か重要なことを見逃していますか?

4

7 に答える 7

11

これは、いわゆる「ヨーダ条件」 (項目 1)のケースです。それらを C/C++ で合理化することは可能ですが、Java で使用する理由はありません。

C/C++ では、任意の型の式をifs およびwhiles に入れることができます。書き込み

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)

ifJava は、 、while、およびの制御ブロック内の非ブール式をエラーと見なすため、 の代わりにforトラップし、エラーをトリガーします。したがって、表現を「よみがえらせる」ことによって可読性をあきらめる理由はありません。var = nullvar == null

于 2012-12-05T17:19:20.927 に答える
2

文字列が 20 よりも長い場合にのみ、文字列の内容を出力したいとします。次のようにします。

if (str != null && str.length() > 20) {
    System.out.println(str);
}

これstr != null &&を省略すると、str実際にnull.

の違いについて言及している場合は、

if (str == null) { ... }

if (null == str) { ... }

なにもない。

于 2012-12-05T17:20:16.247 に答える
1

答えはノーだ!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 でそれを使用しないでください

于 2012-12-05T17:21:42.427 に答える
1

何度か読んだ方が良いかもしれません

if( null == someFunction(someParameter, anotherParameter) )

if( someFunction(someParameter, anotherParameter) == null )
于 2012-12-05T17:25:03.543 に答える
0

これは通常、開発者の母国語のアーティファクトです。一部の言語には、null == valueよりも自然にするルールがありますvalue == null。構文的には、Java と同じです。

于 2012-12-05T17:19:45.773 に答える
0

チェックしないと、null ポインター例外が発生する可能性があります。

この順序で配置すると、= (代入) と == (等価) を混同しなくなります。

両方

if (a = null)

if (a == null)

コンパイルします。ただし、おそらく最初ではなく 2 番目が必要です。

それらをひっくり返すと、

if (null = a)

コンパイルされませんが、

if (null == a) 

コンパイルします。

したがって、コンパイル時に小さな、見つけにくいエラーをキャッチできます。

于 2012-12-05T17:19:52.423 に答える
0

value = null== を省略した場合などに値を割り当てていないことを確認するためだけに、このコードは正常にコンパイルされ、実行時にのみ識別できますが、null = valueこのようにしようとするとコンパイルされません。

于 2012-12-05T17:20:31.810 に答える