switch
ステートメントが「バイナリ検索」またはいくつかの並べ替え手法を使用して正しいケースを正確に選択し、これにより、else-ifラダーと比較してパフォーマンスが向上することをどこかで読みました。
また、ケースを順番に指定すると、スイッチはより速く機能しますか?そうですか?これについてあなたの貴重な提案を追加できますか?
ここ ほぼ同じことについて話し合い、質問として投稿する予定でした。
switch
ステートメントがコードでどのように実現されるかは、実際にはコンパイラー次第です。
しかし、私の理解では、それが適切な場合(つまり、比較的密度の高い場合)、ジャンプテーブルが使用されます。
これは、次のようなことを意味します。
switch(i) {
case 0: doZero(); break;
case 1: doOne();
case 2: doTwo(); break;
default: doDefault();
}
(恐ろしい疑似アセンブラですが、はっきりしているはずですが)のようなものにコンパイルされることになります。
load i into REG
compare REG to 2
if greater, jmp to DEFAULT
compare REG to 0
if less jmp to DEFAULT
jmp to table[REG]
data table
ZERO
ONE
TWO
end data
ZERO: call doZero
jmp END
ONE: call doOne
TWO: call doTwo
jmp END
DEFAULT: call doDefault
END:
そうでない場合は、「一連の条件文よりも優れた」ある程度を可能にする他の可能な実装があります。
Swtichの実装方法は、使用している値によって異なります。範囲が近い値の場合、コンパイラは通常、ジャンプテーブルを生成します。値が大きく離れている場合は、バイナリ検索などを使用して適切な値を見つけることにより、リンクされたブランチが生成されます。
Switchステートメント自体の順序は重要ではありません。昇順、降順、またはランダムな順序のいずれであっても同じことを行います。実行したいことに関して最も意味のあることを実行します。
他に何もないとしても、スイッチは通常、if-elseシーケンスよりもはるかに読みやすいです。
いくつかのグーグルで、私はいくつかの興味深いリンクを見つけ、私の質問への回答として投稿する予定でした。 http://www.codeproject.com/Articles/100473/Something-You-May-Not-Know-About-the-Switch-Statem
コメントは大歓迎です。