どちらも条件付き判断であるこれら 2 つのステートメントの違いは何でしょうか?今日はそれらについて説明しましょう。
基本文
if else のコード分解:
//单if语句,满足该条件时执行,不关心不满足的情况
if(true){
do something;
}
//if else语句,满足该条件时执行,对不满足的情况进行对应处理
if(true){
do something;
}else{
do other things;
}
// 多if语句,依次执行每一条if语句,
//满足条件时执行,不满足则进行下一条if的判断。
if(case1){
语句一
}else if(case2){
语句二
}else if(case3){
语句三
}
スイッチのコード分解:
switch(choose){
case 1:
语句一
break;
case 2:
语句二
break;
case 3:
语句三
break;
default:
默认语句
}
文法構造の観点から見ると、switch は複数の if ステートメントに似ています。コードを記述するプロセスでは、switch よりも記述が便利で高速であるため、多くの人が if else を使用することを好みます。
スイッチと if else の実行効率
多くの場合、if 文よりも switch の方が実行効率が高くなります。
その理由は、switch ステートメントの実行時に、実際の case ブランチのアドレスを示す「ジャンプ テーブル」が最初に生成され、この「ジャンプ テーブル」のインデックス番号が swtich の case 値に等しいためです。この場合、Switch は if else のように正しい条件が見つかるまですべての条件を調べる必要はなく、分岐を見つけるという目的を達成するためにインデックス番号に対応するテーブル エントリにアクセスするだけで済みます。
簡単に言うと、switch はデータ統計テーブルを生成し、case の後ろにあるすべての値をカウントし、一致する場合にテーブル内のデータを比較し、存在する場合は対応する case ステートメントに直接ジャンプし、存在しない場合は、デフォルトのステートメントに直接ジャンプします。
それ以外の場合はどうでしょうか?
if else ステートメントでは、正しいオプションの位置が見つかるまで、値の範囲を 1 つずつ判断する必要があり、必然的に時間がかかります。
したがって、動作効率の観点から、if else の計算量は O(n)、つまり最悪の場合 n 回判定することになり、switch の計算量は O(1)、switch 文はさらに良いです。
要約する
簡単に要約すると、次のようになります。
1. switch 文は独自の case 値の判定方法により実行効率が高くなりますが、if else 文は判定機構の関係で若干実行効率が低くなります。
2. どの選択ステートメントを使用するかは、現在のコード環境に関連します。範囲値の場合は if else ステートメントを使用する方が高速です。特定の値の場合はswitch を使用するのが良い選択です。