JavaScriptの条件分岐(switch文)について
switch文の概要
JavaScriptのswitch
文は、複数の条件を効率的に評価するための構文です。これは、長いif...else if
文をシンプルにまとめるのに役立ちます。switch
文では、1つの式(値)を評価し、その値と一致するcase
ブロックを実行します。
基本的な構文
switch (式) {
case 値1:
// 値1と一致する場合の処理
break;
case 値2:
// 値2と一致する場合の処理
break;
default:
// どのcaseとも一致しない場合の処理
}
ポイント:
break
は、実行を中断しswitch
文を終了します。これがないと次のcase
が実行されます(フォールスルー)。default
はオプションですが、指定することを推奨します。一致するcase
がない場合に実行されます。
例1: 簡単な条件分岐
const day = "Monday";
switch (day) {
case "Monday":
console.log("今日は月曜日です。");
break;
case "Tuesday":
console.log("今日は火曜日です。");
break;
default:
console.log("その他の曜日です。");
}
上記のコードでは、day
が”Monday”の場合、”今日は月曜日です。”が出力されます。
フォールスルーの挙動
break
がない場合、次のcase
も実行されます。これをフォールスルーと言います。
const fruit = "Apple";
switch (fruit) {
case "Apple":
console.log("Apple is red.");
case "Banana":
console.log("Banana is yellow.");
default:
console.log("Unknown fruit.");
}
出力結果:
- Apple is red.
- Banana is yellow.
- Unknown fruit.
フォールスルーを防ぐには、break
を必ず使用します。
型の厳密さ
switch
文では厳密等価演算子(===
)が使用されるため、型の一致も重要です。
const value = "1";
switch (value) {
case 1:
console.log("数値の1です。");
break;
case "1":
console.log("文字列の1です。");
break;
default:
console.log("一致しません。");
}
出力結果: 文字列の1です。
例2: 複雑な条件
複数のcase
で同じ処理を行いたい場合は、case
を連続させることで実現できます。
const grade = "B";
switch (grade) {
case "A":
case "B":
console.log("優秀な成績です。");
break;
case "C":
console.log("普通の成績です。");
break;
default:
console.log("改善の余地があります。");
}
上記では、grade
が”A”または”B”の場合に”優秀な成績です。”が出力されます。
defaultなしの例
時にはdefault
を省略することも可能です。ただし、一致しない場合の挙動が不明確になるため注意が必要です。
const color = "blue";
switch (color) {
case "red":
console.log("赤です。");
break;
case "green":
console.log("緑です。");
break;
}
出力: 何も出力されません。
if…else ifとの比較
switch
文は、複数の値を比較する場合にif...else if
よりも読みやすいコードを提供します。ただし、範囲比較には適しません。
// switch文では不可能な範囲比較
const score = 85;
if (score >= 90) {
console.log("Aランク");
} else if (score >= 80) {
console.log("Bランク");
} else {
console.log("その他のランク");
}
上記のような範囲比較はif...else if
の方が適しています。
まとめ
switch
文は、複数の値の一致を効率よく処理する強力なツールです。適切に使用することで、コードの可読性とメンテナンス性を向上させることができます。特に、値が明確に分かれている場合に有効です。ただし、複雑な条件や範囲比較にはif...else if
が適している場合があります。