2

数値が 1 以上であることを確認するときのベスト プラクティスは何かと常に考えていました。

IF($foo > 0)

また

IF($foo >= 1)

どちらを使用する必要がありますか? どちらも同じように見えます。

4

5 に答える 5

3
                     -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
于 2012-11-23T15:29:42.377 に答える
3

最終的に正しいものは次のとおりです。

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
}
于 2012-11-23T15:22:48.443 に答える
0

要件が値が 1 以上であることを確認している場合、ここで決定を下すことさえありません。唯一の選択肢はx >= 1、論理的にも意味的にも です。

于 2012-11-23T15:29:38.773 に答える
-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しかし、チェックするレコードが数百万ある場合は...

編集

ベンチマークをさらに数回実行すると、さらに大きな違いが得られます。のような違い1015さらには20ms! どうやらプロセッサがビジー状態だったようですが、皆さんと共有できてよかったです。

于 2012-11-23T16:11:55.970 に答える