【JavaScript】switch文を解説【switch, case, break】

JavaScript

みなさんこんにちは、現役エンジニアのサメハックです

アパレル企業でトップ販売員を経て
未経験からWebエンジニアに転職し、
現在正社員として5年働いています!

今回はswitch文について学んでいきましょう!

駆け出しエンジニアや未経験の方、
また新入社員を指導する先輩社員にとっても
わかりやすいように解説していきます!

この記事を読むと・・・
  • switch文の書き方が理解できる
  • if文との使い分け方が理解できる
switch文を理解しよー!

switch文とは

switch文とは、JavaScriptにおける条件分岐のひとつです。
指定した変数等に、何の値が入っているかによって条件を分岐させます。

■ 構文

switch (変数){
    case 値1 :
        // 変数 === 値1 の場合の処理
        break;
    case 値2 :
        // 変数 === 値2 の場合の処理
        break;
    case 値3 :
        // 変数 === 値3 の場合の処理
        break;
    default :
        // どの条件も満たさない場合の処理
        break;
}

このようにcase-breakまでを1つのcase句として
処理が分岐されます。

最後のdefault-breakはdefault句と呼ばれるもの
どのcase句にも該当しなかった際の処理が書かれます。
※ちなみに、default句はオプションなので省略可能です。

実際にコードを書いて動かしてみましょう!
※実行環境がない方は、こちらの記事を参考にオンラインで実行してみてください!

【JavaScript】ログを出してみよう!【console.log】
この記事を読むとこのような事ができるようになります! ・ログが出せるようになる ・実際のWebサイトでログが見れるようになる ・環境構築不要でJavaScriptが学べるようになる

myHobbyという定数を宣言して、
値が何かによって、出力する処理を分ける。
・いずれにも該当しない場合は「趣味はナイショです」と出力

// 定数の宣言
const myHobby = "プログラミング" ;

// 条件分岐
switch (myHobby) {
    case "ギター" :
        console.log("趣味はギターです");
        break;
    case "プログラミング" :
        console.log("趣味はプログラミングです");
        break;
    case "料理" :
        console.log("趣味は料理です");
        break;
    default :
        console.log("趣味はナイショです");
        break;
}
// 【出力結果】趣味はプログラミングです

2つ目case句にヒットし「趣味はプログラミングです。」と、出力されたはずです。

// 定数の宣言
const myHobby = "ゴルフ" ;

// 条件分岐
switch (myHobby) {
    case "ギター" :
        console.log("趣味はギターです");
        break;
    case "プログラミング" :
        console.log("趣味はプログラミングです");
        break;
    case "料理" :
        console.log("趣味は料理です");
        break;
    default :
        console.log("趣味はナイショです");
        break;
}
// 【出力結果】趣味はナイショです

余裕がある方は、myHobbyに別の文字列を代入して、処理が変わることを見てみてください♪

switch文とは、条件分岐のひとつだよ!
指定した変数に、なんの値が入っているかという観点で処理を分岐させるよ!

breakについて

switch文において、break;という記述が非常に重要となってきます。

breakとは、壊すという意味ですよね。
つまり、今回はswitch文の処理を壊して、強制終了させる!
というようなニュアンスで使われています。

先程の例で、breakがないパターンを試してみましょう

// 定数の宣言
const myHobby = "プログラミング" ;

// 条件分岐
switch (myHobby) {
    case "ギター" :
        console.log("趣味はギターです");
    case "プログラミング" :
        console.log("趣味はプログラミングです");
    case "料理" :
        console.log("趣味は料理です");
    default :
        console.log("趣味はナイショです");
}
// 【出力結果】趣味はプログラミングです
//           趣味は料理です
//           趣味はナイショです

このように、条件を満たしたcase句以降のすべての句の処理が
実行されてしまいました。

どうしてこのようなことが起こってしまうかというと、
switch文は一度case句がtrueと判定されてしまうと、
break;してswitch文自体の処理を強制終了しないと
後続の処理もすべてtrueと判定されて処理が実行されてしまいます。(たぶん)

なので、予期せぬバグを防ぐため、breakは忘れないようにしましょう。

break;を忘れてしまうと、後続の処理がすべて実行されてしまうので注意だよ!

switchとifの使い分け

ここまで読むと一つの疑問が湧いてきたと思います。それは

「ぶっちゃけif文とswitch文って何が違うの??」

という疑問だと思います。

ここでは、実際のコードを動かしつつその疑問を
解決しようと思いますが、結論から言います。

switch文は変数と値を厳密等価演算子で比較します。
なので、〇〇以上以下や、〇〇かつXXのような
複雑な条件が指定されている場合には使えません。

ちょっと分かりづらいと思うので、
同じ処理をif文とswitch文で書き換えてみましょう

// 定数の宣言
const myHobby = "プログラミング" ;

/* ------------switch文-------------------*/
switch (myHobby) {
    case "ギター" :
        console.log("趣味はギターです");
        break;
    case "プログラミング" :
        console.log("趣味はプログラミングです");
        break;
    case "料理" :
        console.log("趣味は料理です");
        break;
    default :
        console.log("趣味はナイショです");
        break;
}
// 【出力結果】趣味はプログラミングです

/* --------------if文-------------------*/ if (myHobby === "ギター") { console.log("趣味はギターです"); } else if (myHobby === "プログラミング") { console.log("趣味はプログラミングです"); } else if (myHobby === "料理") { console.log("趣味は料理です"); } else { console.log("趣味はナイショです"); } // 【出力結果】趣味はプログラミングです

ご覧の通りですが、すべての条件式が厳密等価演算子(===)を用いて比較されていることがわかります。

厳密等価演算子について復習したい方はこちら

【JavaScript】真偽値と比較演算子【Boolean】
この記事を読むと・・・ 真偽値の判定方法がわかる! 比較演算子の使い方がわかる! 等価演算子と厳密等価演算子の違いがわかる!

ちなみに、参考までですが、caseは複数指定することも一応可能です。
実用的ではありませんが、あえて微妙な条件分岐を行ってみましょう。

☆変数scoreが95以上の際に「合格です」と出力
95未満の場合「不合格です」と出力

// 定数の宣言
const score = 98;

/* ------------switch文-------------------*/
switch (score) {
    case 95 :
    case 96 :
    case 97 :
    case 98 :
    case 99 :
    case 100 :
        console.log("合格です");
        break;
    default :
        console.log("不合格です");
        break;
}
// 【出力結果】合格です


/* --------------if文-------------------*/
if (score >= 95 ){
    console.log("合格です");
} else {
    console.log("不合格です");
}
// 【出力結果】合格です

このように、できるっちゃできますが、
現実的ではないし、可読性も低いので
trueとなる条件が複数ある場合はif文を使いましょう

※if文について復習したい方はこちらを

【JavaScript】条件分岐をわかりやすく解説!【if文, if else文】
この記事を読むと・・・ 条件分岐を理解できる if文が書けるようになる if~else文が書けるようになる
switch文は厳密等価演算子を用いて、変数と値を比較するよ!
ややこしい条件分岐をする際はif文を使うのが一般的だよ!

おまけ:問題

信号の色を表す変数signalを宣言し、信号の色が
青 → 「進め」
黄色 → 「注意」
赤 → 「止まれ」
と出力する処理をswitchを用いて作ってください。

まとめ

  • switch文とは、JavaScriptにおける条件分岐のひとつ
  • 指定した変数等に、何の値が入っているかによって条件を分岐させる
  • 一つの変数にフォーカスして処理を分けるので、想定外のバグが起こりづらい
  • 変数と値は厳密等価演算子(===)を用いて行いて比較される
  • break;がないと処理を抜けられないので注意
  • 複数の条件を指定したい場合は、if文を使用する
switch文が書けるようになってえらい!
if文とうまく使い分けて、可読性の高いコードを記述しよう!

おまけの答え

その1:case句のみを使うパターン

// 変数の宣言
let signal = "黄色";

switch (signal) {
    case "青" :
        console.log("進め");
        break;
    case "黄色" :
        console.log("注意");
        break;
    case "赤" :
        console.log("止まれ");
        break;
}
// 【出力結果】注意

その2:default句を使うパターン

// 変数の宣言
let signal = "赤";

switch (signal) {
    case "青" :
        console.log("進め");
        break;
    case "黄色" :
        console.log("注意");
        break;
    default :
        console.log("止まれ");
        break;
}
// 【出力結果】止まれ

満足いただけたら、1クリックなのでSNSフォローしてもらえると嬉しいです🦈

タイトルとURLをコピーしました