3

私が使用している API 実装のソース コードを読んでいて、コードの次の部分に出くわしました。

if (condition1 & condition2 && (condition3 || condition4))

条件 1 と 2 はメソッドを呼び出したりアクションを実行したりしませんが、条件 3 と 4 は実行します。プログラマーが最初の 2 つのステートメントの比較に短絡 && 演算子を使用しないことにしたのはなぜでしょうか。プログラムの一部はまだ短絡しています)。

4

3 に答える 3

3

が 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>「副作用」の領域にあるように使用することを検討し、それが引き起こす混乱に値するものではありません。

于 2013-09-12T15:04:47.297 に答える