さて、皆さんが私に飛びついて「パフォーマンスについて心配している」と言う前に、ここではむしろ熱心すぎるというよりも好奇心からこれをお願いしていることをここに立たせてください。とはいえ...
&&( "and")演算子の使用とネストされたifステートメントのパフォーマンスに違いがあるかどうか興味があります。また、実際の処理の違いはありますか?つまり、&& always process bothステートメントを実行しますか、それとも最初のステートメントが失敗した場合に最初のステートメントを停止しますか?ネストされたifステートメントとはどう違うのでしょうか?
明確にする例:
A)&&( "and")演算子
if(a == b && c == d) { ...perform some code fashizzle... }
対B)ネストされたifステートメント
if(a == b) {
if(c == d) { ...perform some code fashizzle... }
}
パフォーマンスの違いはごくわずかです。左側の式がfalse
を評価するとき、&&
演算子は右側の式をチェックしません。ただし、&
演算子はbothに関係なくチェックしますが、この事実が原因で混乱が生じている可能性があります。
この特定の例では、&&
を使用するものを選択します。読みやすいので。
パフォーマンスが心配な場合は、a==b
がc==d
よりも失敗する可能性が高いことを確認してください。そうすれば、if
ステートメントは早期に失敗します。
性能テストは、物事を明確にするのに役立つかもしれません: http://jsperf.com/simey-if-vs-if
この2つのパフォーマンスの違いは、ごくわずかです。しかし、@ Gertが述べたように、早期に失敗すると本当に改善されます。
ネストされたif
sと同様に、&&
は怠け者です。
表現 a && b
は、b
が真実である場合にのみa
を評価します。
したがって、2つのケースは、機能とパフォーマンスの両方で完全に同一である必要があります。