switch 文で値を一覧から選ぶ
このレッスンで分かること
switch (式) { case 値: ... }で、1 つの値を候補と突き合わせられますswitchの比較は===です。1と"1"は一致しませんbreakもreturnも書かないと、下のcaseへ流れ落ちます
同じ変数名を何度も書いている
作品に付けた種別から、画面に出す日本語のラベルを決めたいとします。else if で書くと、こうなります。
JavaScript
if (ext === "jpg") {
return "画像";
} else if (ext === "png") {
return "画像";
} else if (ext === "html") {
return "ページ";
} else {
return "不明なファイル";
}見比べている左側は毎回同じ ext で、違うのは右側の値だけです。この「1 つの式を、決まった候補のどれかと突き合わせる」形に特化した構文が switch 文です。
JavaScript
function fileKind(ext) {
switch (ext) {
case "jpg":
case "png":
return "画像";
case "html":
return "ページ";
default:
return "不明なファイル";
}
}ext が 1 回しか出てこなくなり、候補が縦に並んで対応表のように読めるようになりました。case "jpg": の直後には何も書いていません。一致した case から実行が始まり、下へ流れて return "画像"; に届きます。この流れ落ちる動きをフォールスルーと呼び、複数の値を同じ扱いにまとめたいときに役立ちます。
| 部品 | 役割 |
|---|---|
switch (式) | 突き合わせのもとになる値。1 回だけ評価される |
case 値 | 比較する候補。一致するとここから実行が始まる |
break | switch を抜ける。書かないと下へ流れる |
default | どの case にも一致しなかったときの受け皿 |
return | 関数ごと抜けるので break の代わりになる |
break を忘れると、下まで流れ落ちる
便利なフォールスルーは、そのまま最大の落とし穴でもあります。値を代入して組み立てる書き方だと、break が無い枝は下の代入で上書きされます。
JavaScript
// NG。"jpg" を渡しても "不明なファイル" が返る
let kind = "";
switch (ext) {
case "jpg":
kind = "画像";
case "html":
kind = "ページ";
default:
kind = "不明なファイル";
}case "jpg" から始まった実行が、止まらずに最後まで落ちてしまいました。各枝の末尾に break; を足せば直ります。
なお、枝の中で return を書いていれば、その場で関数ごと抜けるので break は要りません。関数の中で値を返すだけの分岐なら、return で書くほうが書き忘れの事故を防げます。
よくある間違い
- 型の違いに気付かない —
switchの比較は常に===で、ゆるい比較モードはありません。フォームから来た値は文字列になりがちなので、候補の書き方をそろえてください
JavaScript
switch (n) {
case 1:
return "一番目";
}
// n が "1" のときは一致しないcaseに範囲を書こうとする —case n >= 5:はtrueかfalseとnを比較してしまい、期待どおりに動きません。範囲の判定はifとelse ifの出番ですdefaultを書かない — どの候補にも当てはまらない値が来たときに、何も返らずundefinedになります。読み手が迷わないよう、素直に最後へ置いてください
要件
- 関数名は categoryLabel、引数はカテゴリ名を表す文字列 category の 1 つ
- "web" と "frontend" は "Web 制作"、"design" は "デザイン"、"study" は "学習メモ" を返す
- どれにも当てはまらない値と空文字は default で受け止め、"その他" を返す
- if ではなく switch を使い、戻り値はすべて文字列にする
入出力例
categoryLabel("web") → "Web 制作"
categoryLabel("frontend") → "Web 制作"
categoryLabel("design") → "デザイン"
categoryLabel("study") → "学習メモ"
categoryLabel("") → "その他"ヒント
編集 ゆめさく編集部