2011-06-28 5 views
2

私はいくつかのコード強化の報告をしようとしていますが、私はこの項目が何を呼ばれているかについてあまりよく分かりません。基本的には、conn == nullを実行する代わりに、可読性のためにnull == connを行います。このコード強化または練習とは何ですか? (conn == null)と対照的に(null == conn)

よろしくお願いします!

前:

 if (conn == null){    
      if (log.isDebugEnabled()){ 
       log.debug("Failed to get a DB Connection"); 
      } 
     } 

後:

 if (null == conn){    
      if (log.isDebugEnabled()){ 
       log.debug("Failed to get a DB Connection"); 
      } 
     } 
+1

これは改善されておらず、両方とも意味的に同じです。 –

+1

私は、他のものよりも読みやすいとは言いません。彼らはほとんどあらゆる点で同等であり、すべての点で重要です。 – trutheality

+2

私は時には[ヨーダ条項](http://wiert.wordpress.com/2010/05/25/yoda-conditions-from-stackoverflow-new-programming-jargon-you-coined/)という言葉を聞いたことがあります。少なくともSOで)。ハッピーコーディング。 –

答えて

7

これは読みやすくするためではなく、誤って割り当てるのを防ぐことです。

誤って記述した場合

:CまたはC++で

if (conn = null) 

nullconnを設定し、条件としてその値を使用します。これは必要ないという事実にもかかわらず、これはJavaに引き継がれています。

他の方法では、コンパイラはそれを定数に割り当てる試みとしてキャッチし、コンパイルされないようにします。

私はそれが何と呼ばれているかについて、特定の名前が与えられているのを見たことがありません。あなたがそれを説明するなら、それをあなたが望むものと呼ぶことができます。 triple-aに短縮できるので、Accidental assignment avoidanceが好きです。

+1

Javaは 'if'ステートメントでブール式しか使えないので、' if(true == someCondition) 'のようなものにしか使えないので、' if(someCondition) 'と書いたほうが良い。 –

+1

もちろん、 Javaでの代入はブール値にキャストされないので、実際には予防措置よりも履歴への帽子のほうが多くなります。 –

+1

Javaは引き続き 'if(x = true)'を受け付けます。ここでxはブール変数です。 'if(true = x)'を受け入れません(これは愚かですが、悲しいことです)。したがって、ブール値などに魔法のようなキャストがない場合でも、この逆条件はあなたを救うでしょう。 –

3

この練習では、 "平等のテストでは、変数の前に定数を置く" と呼ばれています。 =は(==比較が意図されていた)割り当てある

if (conn = null) { ... 

表向きその目的は、入力エラーの特定の種類を回避することです。現代のコンパイラはこのエラーについて警告しているので、この練習はもう必要ではありません。

+0

HiGreg、現代のコンパイラ、参照先は? –

+1

私は、ほとんどの場合、古いCコンパイラを指していました。 'if(conn = ____)'が動作する唯一の型は、 'conn'がブール値であるためです。これは通常、Javaでは問題ありません。 –

1

誤って変数に代入しないようにするだけです。

conn=nullを使用すると、変数にnullが割り当てられますが、null=connを指定すると、nullに割り当てることができないため、エラーが発生します。

だから、それはあなたが誤って特定の構文はかなり無用であることを代わりに2つの「==」

1

の1「=」と入力エラーを防ぐことができます。しかし、未知の初期化状態のオブジェクトを「定数」オブジェクトと比較するときに考慮してください。

String unknown; 
String KNOWN = "Hello"; 

とてもあなたの比較を行うためにはるかに優れています:

if(KNOWN.equals(unknown)) do something; 

それは実行時例外を引き起こす可能性が省略された場合はnullチェックを保存します。

関連する問題