どちらがより良い最速の方法です:ifまたはswitch?
if(x==1){
echo "hi";
} else if (x==2){
echo "bye";
}
switch(x){
case 1
...
break;
default;
}
どちらがより良い最速の方法です:ifまたはswitch?
if(x==1){
echo "hi";
} else if (x==2){
echo "bye";
}
switch(x){
case 1
...
break;
default;
}
あなたの最初の例は単に間違っています。elseif
だけでなく必要ですelse
。
あなたが使用するif..elseif...
かswitch
、主に好みの問題である場合。パフォーマンスは同じです。
ただし、すべての条件がすべての条件で同じタイプx == value
である場合、通常は理にかなっています。また、たとえば2つ以上の条件がある場合にのみ使用します。x
switch
switch
switch
実際にパフォーマンス上の利点が得られるのは、変数部分が関数呼び出しの場合です。
switch(some_func()) {
case 1: ... break;
case 2: ... break;
}
その後some_func()
、一度だけ呼び出されます
if(some_func() == 1) {}
elseif(some_func() == 2) {}
これは2回呼び出されます。これには、関数呼び出しが2回発生する可能性のある副作用も含まれます。ただし、いつでも使用してから自分の条件で$res = some_func();
使用できるため、この問題を完全に回避できます。$res
if
スイッチをまったく使用できない場合は、より複雑な条件がある場合です。定数値である場合にswitch
のみ機能しx == y
ます。y
phpbench.comによると、厳密な比較 (===) を使用する場合は特に、if/elseif がわずかに高速です。
しかし、何千回も呼び出される関数でマイクロ秒を短縮したい場合にのみ、問題になります。
一般的なルールは、条件の数が 3 を超える場合に使用switch
されます(読みやすくするため)。
if
//はより柔軟です (したがって優れています) がelse if
、条件を 1 回計算してから出力をチェックするだけで、毎回これを行う必要があるため、わずかに高速です。else
switch
if
編集:結局switch
より遅いようですがif
、そうではなかったと断言できます...
用途によります。fxpステータス(オンライン、離れている、dnd、オフラインなど)がある場合は、スイッチを使用することをお勧めします。
switch(status)
{
case 'online':
...
}
しかし、あなたがこのようなものが欲しいなら
if ((last_reply.ContainsKey(name)) && (last_reply[name] < little_ago))
また
if (msg.ToString()[0] == '!')
そうでなければ、そのより良い使用法。
この投稿を見つけました: https://gist.github.com/Jeff-Russ/2105d1a9e97a099ca1509de1392cd314これは、switch/case が === の if/elseif よりも高速であることを示しています。
これらは、ネストされた if ステートメントも示しています。これは、はるかに理にかなっていて、はるかに優れた結果を提供します。
彼らの時間:
ネストされた if/elseif === : 0.25623297691345 (ネストされた IF)
スイッチ/ケース : 0.33157801628113 (スイッチケース)
=== の if/elseif : 0.45587396621704 (フラット IF)
=== の場合のみ: 0.45587396621704 (場合のみ)
私は、コンパイラーがそれらを非常に類似した、あるいはおそらく同じコードに変換するだろうと信じています。
何か変なことをしているのでない限り、コンパイラーの最適化を試みないでください。
また、開発者の時間は一般にランタイムよりも重要であるため(ゲームを除く)、読みやすく保守しやすいものにすることをお勧めします。
私の意見では、「if/else」は高速ですが、switchよりは優れていませんが、私はこれを好みます:
echo ($x==1?"hi":($x==2?"bye":""));
if/else if/else のような 1,2 ケースを実行する必要がある場合