私は次のスタイルのJavaソースコードに取り組んでいます:
if (0 == var) {}
and
if (null == someObj) {}
また
if (0 != var) {}
and
if (null != someObj) {}
次のように書き直す必要があります。
if (var == 0) {}
and
if (someObj == null) {}
?
前もって感謝します!。
次のことは完全に有効です。
if (0 == var) {}
and
if (null == someObj) {}
の代わりにシングルを誤って使用することを防ぐために、ヨーダ記法と呼ばれることで有名です。=
==
個人的には使ったことがありません。しかし、それが好きな人もいます。それは本当に好みの問題です。
ただし、Javaでは役に立ちません。なぜなら、そのような偶発的なタイプミスはコンパイル時にキャッチされるからです。
次の場合、Javaでコンパイル時エラーが発生します。
if( var = 0 )
{
//Some code
}
代入演算はJavaではブール値を生成しないためです。ただし、C / C ++などの言語では、上記は有効であり、警告が有効になっていない場合、コンパイラはエラーを出しません。上記のif
条件は、C / C ++では常にfalse(0)と評価されます。そのため、実行時に見過ごされ、予期しない結果が生じる可能性があります。
GCCでは、すべての警告が有効になっていると、CまたはC++で上記の警告が表示されます。
warning: suggest parentheses around assignment used as truth value
したがって、これはC / C ++でもあまり役に立たない可能性があります。これは、すべての警告を使用してコンパイルし、すべての警告を修正することが期待されているためです。前に言ったように、それは個人的な選択であり、違いはありません。
有効な構文であり、ヨーダif ( 0 == var){}
記法と同じif (var == 0) {}
です。
一般的に、書くこと0 == n
はと呼ばれyoda condition
ます。あなたがそれを大声で言うならば、あなたは言うからですif zero equals my var
。
と書く方がいいn == 0
です。しかし、それはまったく同じです。しかし、それはよりよく読まれます。
条件の長所のいくつかは、Javaには適用されません。
if (value = 42)
コンパイルエラーが発生します。javaので有効な入力ではないをvalue = 42
生成します。しかし、で完全に合法です。int
if
C
constant
左側のを使用して比較することは、一般的なベストプラクティスです。ただし、Objectequalsメソッドを使用する場合のみ。
if ("CONSTANT".equals(myString))
がnullの場合、または変数にアクセスできないためにmyString
比較している場合は、nullをチェックしても意味がありません。primitives
.equals()
if ( "CONSTANT" == null )
私の意見ですが、利点は読みやすさだけです。
最初のスタイルは、偶然ではvar = null
なく、var == null
CやC ++などの言語ではキャッチしにくいバグですが、null = var
コンパイルされないためキャッチしやすいため、一部の人に好まれています。コメントに記載されているように、これはnull = var
ブール式ではないため、Javaには適用されません。
この種の用語は、英語の自然言語と比較して「後方」であるため、 「ヨーダ表現」と呼ばれます。
私はそれが割り当てで報われるとは思いません-優れたコード監査ツールはこれらのタイプのエラーをキャッチし、ほとんどはより厳密なJavaコンパイラによってすでにキャッチされているはずです(Cの一般的なタイプミスの=
代わりに使用してください!)==
ただし、compareTo
メソッドを使用する場合は、値を考慮する必要がありnull
ます。
if ("example".equals(input))
NullPointerException
より「自然な」間、に遭遇することはできません
if (input.equals("example"))
可能であり、値の追加チェックが必要null
です。