私が使用している API 実装のソース コードを読んでいて、コードの次の部分に出くわしました。
if (condition1 & condition2 && (condition3 || condition4))
条件 1 と 2 はメソッドを呼び出したりアクションを実行したりしませんが、条件 3 と 4 は実行します。プログラマーが最初の 2 つのステートメントの比較に短絡 && 演算子を使用しないことにしたのはなぜでしょうか。プログラムの一部はまだ短絡しています)。
私が使用している API 実装のソース コードを読んでいて、コードの次の部分に出くわしました。
if (condition1 & condition2 && (condition3 || condition4))
条件 1 と 2 はメソッドを呼び出したりアクションを実行したりしませんが、条件 3 と 4 は実行します。プログラマーが最初の 2 つのステートメントの比較に短絡 && 演算子を使用しないことにしたのはなぜでしょうか。プログラムの一部はまだ短絡しています)。
が true である頻度がわからない場合condition1
は、 を使用する方が (非常に効率的) 優れていたでしょう。これは&&
、2 番目のオペランドが falsecondition2
かどうかをチェックする必要がないためですcondition1
。これにより、いくつかの CPU 命令を節約できる可能性があります。
統計的に真であることが多い場合は、(通常は不要な) 短絡チェックがスキップされるため、condition1
おそらく を使用する方が効率的です。&
Java では、ビットごとのオペランドとブール値のオペランドを使用してブール値の結果を得ることができますが、との使用に&
機能的な違いがあるのは、コードが 2 番目のオペランドで呼び出された場合のみです。たとえば、次のようになります。&
&&
condition1 & <some code giving a boolean> // exdcutes "some code" regardless of condition1
condition1 && <some code giving a boolean> // only executes "some code" if condition1 is true
&
常に<some code giving a boolean>
「副作用」の領域にあるように使用することを検討し、それが引き起こす混乱に値するものではありません。