ifブロックとswitch/selectブロックの違いがわかりません。私はいつもそれらを使用しているという意味です。しかし、スイッチブロックをいつ適用する必要があるのか、いつ適用しないのかは私にはわかりません。以来、selectブロックはifブロックに展開できます。したがって、selectブロックを使用することで私が考えることができる唯一の本当の利点は、人間が読みやすいことです。
5 に答える
答えは言語によって少し異なります。たとえば、C および C++ では、 (select) ステートメントは、ステートメント条件switch
よりも制限が厳しいため、コンパイラによってかなり効率的なジャンプ テーブルに変換されることがあります。if
(公平を期すために、最新のコンパイラはあらゆる種類のものを最適化するのに非常に優れています。)これはすべての言語/コンパイラに当てはまるとは限りません(VB6は基本的Select Case
に一連のIf/ElseIf
ステートメントとして扱われたことを思い出します。)
可読性は間違いなく重要な要素です。a switch
(またはSelect Case
VB) を使用すると、以下のすべての分岐が共通の条件で分岐していることがわかります。これは非常に便利です。
保守性 (可読性に関連しますが、読みやすさとは異なります) も要因の 1 つです。で分岐されているものを 1 つ変更すると、switch
完了です。長い一連のif
ステートメントがある場合、1 つ (または複数) を見逃すのは簡単です。
switch ブロックには、次のものがほとんど必要です。
- 調査する基準が 1 つしかない場合、または相互に依存しない複数の基準がある場合
- 複数の (つまり、2 つまたは 3 つを超える) 定義済みのブランチがある場合
- たとえば、「day == Days.Monday」のように等値を検索したい
同時に複数の共依存基準をチェックしたい場合、ブランチが 1 つだけ (または小さなブランチが 2 つ) ある場合、または不等式 (たとえば、"time > 8.00") を検索したい場合は、if ステートメント行く方法です。
おそらく、私のリストの最初のポイントは、さまざまな「気の利いた」テクニックを使用して回避できますが、私の経験では、複雑で読みにくいコードにすぎません.TJが述べたように、読みやすさは保守可能なコードを書く際の要因です.
したがって、選択ブロックを使用することで私が考えることができる唯一の本当の利点は、人間の読みやすさです..
それを過小評価しないでください。プログラミングでは、人間の可読性がデフォルトの No. 1 の懸念事項であるべきです。
複数のアイテムを比較したい場合は、if ブロックを使用します。if/elseif/else を使用できます。1 つの変数の値に反応したい場合は、switch/select ブロックを使用します。
if (today is monday) {
it is moday.
} else if (today is tuesday and it is 8:00pm) {
it was not monday but it is tuesday and it is 8:00pm.
} else {
it must be sunday.
}
switch (day) {
case: Monday
it is monday
case: Tuesday
it is tuesday
}
言語にもよりますが、Cについて話しているとしましょう.Cでは、スイッチブロックはジャンプテーブルに変換されるため、値に基づいて、実行したい部分に直接ジャンプします.一方、if ブロックでは任意の比較を行うことができ、実行する分岐を見つけるためにすべての可能な値と比較する必要があります。
スイッチは設定値のみを使用できることに注意してください (ジャンプ テーブルはコンパイル時に作成されます)、if ブロックは小なり/大なり比較、または変数との比較を実行できます。