web-dev-qa-db-ja.com

IF-ELSEとSWITCHの違いは何ですか?

誰かがこれを私に説明してもらえますか?

27
ahmed

これらはかなり似ていますが、それぞれにいくつかの特別な機能があります。

スイッチ

  • switchは通常、多数のネストされたif elseしたがって、より読みやすい
  • 2つのスイッチケースの間にbreakを省略すると、多くのCのような言語で次のケースに進むことができます。 if elsegotoが必要になります(読者にとってはあまり良くありません...言語がgotoをサポートしている場合)。
  • ほとんどの言語では、switchはプリミティブ型のみをキーとして、定数をケースとして受け入れます。これは、非常に高速なジャンプテーブルを使用してコンパイラによって最適化できることを意味します。
  • switchを正しくフォーマットする方法は明確ではありません。意味的には、ケースはジャンプターゲット(gotoのラベルなど)であり、左にフラッシュする必要があります。中括弧があると事態は悪化します:

    case XXX: {
    } break;
    

    または、ブレースを独自の行に入れる必要がありますか?閉じブレースをbreakの後ろに置くべきですか?それはどれほど読めないでしょうか?等.

  • 多くの言語では、switchは一部のデータ型のみを受け入れます。

if-else

  • ifは、スイッチが定数を必要としている間、条件で複雑な式を許可します
  • breaks間のifを誤って忘れることはできませんが、elseを忘れることはできます(特にcut'n'paste中)
  • すべてのデータ型を受け入れます。
35
Aaron Digulla

主な違いは、必要なすべての条件を評価するのではなく、switch immediately に関連するcaseに送信することです。 if-elseチェーン内。これは、チェーンの最後のコードが最初のコードよりもゆっくりと到達することを意味します。

そのため、if-elseチェーンにはないswitchステートメントにいくつかの制限が課せられます。すべてのデータ型を処理することはできず、すべてのcase値は一定でなければなりません。

2
user207421

If-elseとswitchの違い

  1. Ifステートメント内の式は、ifブロック内またはelseブロック下でステートメントを実行するかどうかを決定します。一方、switchステートメント内の式は、実行するケースを決定します。

  2. If-esleステートメントは、論理式だけでなく等価性もチェックします。一方、スイッチは同等性のみをチェックします。

  3. Ifステートメントは、整数、文字、ポインター、浮動小数点型、またはブール型を評価します。一方、switchステートメントは、文字または整数データ型のみを評価します。

  4. 実行シーケンスは、ifブロックの下のステートメントまたはelseブロックステートメントの下のステートメントのいずれかと同様です。一方、switchステートメントの式は、どのケースを実行するかを決定し、各ケースの後にbreakステートメントを適用しない場合、switchステートメントの最後まで実行します。

  5. If内の式がfalseである場合、elseブロック内のステートメントが実行されます。 switchステートメント内の式がfalseであることが判明した場合、デフォルトのステートメントが実行されます。

  6. 修正が必要な場所を追跡するのは退屈なので、if-elseステートメントを編集するのは困難です。一方、switchステートメントはトレースしやすいため、簡単に編集できます。

ある言葉では、スイッチはif elseステートメントよりも少し速く動作すると言うことができます!!!

2
Looser

Switchステートメントとif-elseステートメントの違いは次のとおりです。

これはif-elseラダーの一般的な構文です。

if (condition1) { //Body of if }
    else if (condition2) { //Body of if }
    else if (condition3) { //Body of if }
else { //default if all conditions return false }

そして、これはスイッチの一般的な構文です:

switch ( variable )
{
 case <variable value1>: //Do Something
                                             break;
 case <variable value2>://Do Something
                                             break;
 default: //Do Something
                break;
}

If-elseラダーは厳格な条件チェックタイプで、スイッチはジャンプ値キャッチタイプです。

If-elseはしごを切り替える利点:

  • Switchステートメントは、同等のif-elseラダーよりもはるかに高速に動作します。これは、コンパイラがコンパイル中にスイッチのジャンプテーブルを生成するためです。その結果、実行中に、どのケースが満たされるかをチェックする代わりに、どのケースを実行する必要があるかを決定するだけです。
  • If-elseステートメントと比較して読みやすくなっています。
1
Rizwan Shaikh

それ以外の場合-ITは意思決定に使用されます

Switchステートメント-ケース値のリストに対して、指定された変数の値をテストするために使用されます。

1
Kv mathew