数値が 1 以上であることを確認するときのベスト プラクティスは何かと常に考えていました。
IF($foo > 0)
また
IF($foo >= 1)
どちらを使用する必要がありますか? どちらも同じように見えます。
数値が 1 以上であることを確認するときのベスト プラクティスは何かと常に考えていました。
IF($foo > 0)
また
IF($foo >= 1)
どちらを使用する必要がありますか? どちらも同じように見えます。
-1 0 0.5 1
IF($foo > 0) false false true true
IF($foo >= 1) false false false true
IF($foo) true false true true
最終的に正しいものは次のとおりです。
if ($foo >= 1) { }
明確で簡潔であり、任意の数値型 (2 つすべて) に対して機能します。
整数のみの比較の代替手段を次に示します。ところで、パフォーマンス (事実) や読みやすさ (私の意見では) が向上するものはありません。
if ($foo) {
// anything that's not zero, regardless of sign
}
if ($foo != 0) {
// same as above, but forces the left operand to be casted to number
}
if ($foo > 0) {
// anything that's above zero and therefore greater or equal to one
}
要件が値が 1 以上であることを確認している場合、ここで決定を下すことさえありません。唯一の選択肢はx >= 1
、論理的にも意味的にも です。
>=
パフォーマンスに関しては、代わりに使用したいと思います>
。
私の疑似ベンチマーク:
for 100000x {
time result of 5 > 0
}
for 100000x {
time result of 5 >= 1
}
編集: コメントの William が for ループ全体の時間を計るように提案したように、まさにそれが起こったのです。すべての時間を合計すると、for ループ全体のタイミングを一度に合わせたのとまったく同じ結果が得られました。だから基本的に私は同じことをしました。(参考までに、私はウィリアムの提案をベンチマークしましたが、同じ結果が得られました。私を信じてください、私はエンジニアです)
私の結果:
> >=
x100000 | 198.63224029541 | 191.68829917908
In MS
したがって、速度に関しては、整数を使用している場合 (上記の優れた回答を参照してください!)、>=
より高速になります。しかし、結果を考慮してください!テスト7ms
が終わったばかりです。100.000
しかし、チェックするレコードが数百万ある場合は...
編集
ベンチマークをさらに数回実行すると、さらに大きな違いが得られます。のような違い10
、15
さらには20
ms! どうやらプロセッサがビジー状態だったようですが、皆さんと共有できてよかったです。