【Javascript】 switch文

Javascriptにおけるswitch文は、C言語のswitchとほとんど同じ書き方です。ただ、C言語にはできない、文字列でのswitchが可能です。

書き方

C言語と同じように書きます。

const x = 1;
switch (x) {
    case 0:
        console.log("x is 0");
        break;
    case 1:
        console.log("x is 1");
        break;
    case 2:
        console.log("x is 2");
        break;
}
x is 1
switch description

caseに指定する条件は、条件式ではなく値です。この値と一致しているかを判定します。

ここで、for文のときに紹介したbreakが登場しています。breakはswitch文でも使われ、それ以降のswitch内の処理を行わない、というものです。これがないと次のような現象が起こります。

const x = 1;
switch (x) {
    case 0:
        console.log("x is 0");
    case 1:
        console.log("x is 1");
    case 2:
        console.log("x is 2");
}
x is 1
x is 2

"x is 2"まで出力されてしまいました。これは、switch文の条件でcase 1の部分まで飛んだ後、breakするまでswitch内の処理が行われるためです。

もちろん、これを利用した方法もあります。

const x = 0;
switch (x) {
    case 0:
    case 1:
        console.log("x is 0 or 1");
        break;
    case 2:
        console.log("x is 2");
        break;
}
x is 0 or 1

x0だった場合はcase 0に飛びますが、その後breakがないのでcase 1に来ても処理が続き、console.log("x is 0 or 1");が実行されました。しかし、内容を見るとそれを想定した内容になっています。

default句

いずれのcaseも当てはまらない場合、defaultに飛びます。if文のelseのようなものです。

const x = 10;
switch (x) {
    case 0:
        break;
    case 1:
        break;
    case 2:
        break;
    default:
        console.log("xは0, 1, 2ではない");
}
xは0, 1, 2ではない

elseと同様に、他のcaseに当てはまっていれば、この処理は実行されません。

文字列でのswitch

Javascriptでは、文字列でswitchできます。

const time = "afternoon";

switch (time) {
    case "morning":
        console.log("朝");
        break;
    case "afternoon":
        console.log("午後");
        break;
}
午後

ifとの使い分け

switchでは完全一致でしか比較できません。そのため、完全一致比較が続く場合はswitch文を利用する方が簡潔になります。

しかし, その完全一致も何個も続くようであれば、後々の処理の分離や改修しやすさを考え、事前に関数化して配列または連想配列に入れて実行する、という手もあります。

const funcs = [
    () => {console.log("x is 0")}, // 0番目の要素
    () => {console.log("x is 1")}, // 1番目の要素
    () => {console.log("x is 2")}, // 2番目の要素
];

const x = 1;
funcs[x]();
x is 1

まとめ

Javascriptのswitch文では、文字列を指定することが可能です。しかし、代替手段が多いため、どうしても使わないと冗長になる時などでないとあまり使いません。

とはいえ使うときは使うので、書き方だけ知っておくと良いと思います。

switch thumb

役に立ったらシェアしよう!