switch文はある変数の値によって処理を変更することです。
例えるならば、おみくじみたいな感じです。
おみくじには番号が書かれていて、その番号によって運勢や、今後の行動の道しるべみたいなことが書かれていますよね。
switch文はある変数(式)の値によって、どういう処理をするか処理を分けることができます。ちなみに、switch文の書き方は下記の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
switch(変数(式)){ case 値1: 変数(式) === 値1の場合に実行される break; case 値2: 変数(式) === 値2の場合に実行される break; case 値3: 変数(式) === 値3の場合に実行される break; default: 条件に一致しない場合に実行される } |
具体的におみくじのプログラムをswitch文で書いてみます。
chromeの開発者コンソールで下記を実行してみましょう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var no = 1; //おみくじの番号 switch(no){ //noの内容で処理を分ける case 1: //noが1の時の処理 alert('大吉です。いいことありました?'); break; case 2: //noが2の時の処理 alert('中吉です。いいことあるかもね。'); break; case 3: //noが3の時の処理 alert('凶です。ごめんなさい!'); break; default: alert('結果が見つかりませんでした'); } |
大吉の内容が表示されたかと思います。
noの値を変更することで、実行する処理を分けることができます。
注意して欲しいのはbreak文です。
3行あるbreak文を全て消してコメントして実行してみましょう。
noが1の時は大吉以外に、中吉、凶も表示されます。
noが2の時は中吉と凶が表示されます。
つまり、break文がないと処理を実行し続けます。
処理を抜ける必要がある場合は、必ずbreakを入れることを忘れないでください。
最後に記述してあるdefaultは一致するケースがない場合に実行されます。
今回のおみくじプログラムの場合はnoに1,2,3以外が入っている場合に実行されます。
if文との違い
条件によって処理を分けるというのは以前if文で学びました。
ではswitch文との違いは何でしょうか。
おみくじのプログラムをif文で書いてみます。
1 2 3 4 5 6 7 8 9 10 11 |
var no = 1; if(no === 1){ alert('大吉です。いいことありました?'); }else if(no === 2){ alert('中吉です。いいことあるかもね。'); }else if( no === 3){ alert('凶です。すんません!'); }else{ alert('結果が見つかりませんでした'); } |
if文では括弧が多く視認性があまり良くないです。
では、あるテストで80点以上の点数の場合は「合格」を、それ以外は不合格と表示するプログラムをif文とswitch文で書いてみます。
if文
1 2 3 4 5 6 |
var score = 79; if(score >= 80){ alert('合格'); }else{ alert('不合格'); } |
switch文
1 2 3 4 5 6 7 8 9 10 11 |
var score = 81; switch(score){ case 80: alert('合格'); break; case 81: alert('合格'); ・ ・ <多すぎてかけない・・・> } |
もしかしたら上のようにプログラムを書こうとして、面倒と思った方がいるかもしれませんが、switchの条件には式が入るので下記のようにかけます。
1 2 3 4 5 6 7 8 9 |
var score = 81; switch(score >= 80){ case true: alert('合格'); break; case false: alert('不合格'); break; } |
switch文の利点と欠点が理解できたでしょうか。 ざっとまとめて下記に記載します。
- if文は条件が2つの場合に使いやすい
- 条件が3つ以上ある場合はswitch文が見やすい。
- 条件が多い時にはswitch文の方が高速に動作する
4について、一般的に条件が多くなるほどswitch文が高速に動作します。
理由としては、if文は条件に一致しない場合次の条件を逐次確認する必要があるからです。switch文はそのような動作が発生しないため比較的高速に動作します。
演習
- switch文で変数の中身が奇数か偶数か判断するプログラムを作ってみよう。
- 1で作ったプログラムをif文で書き換えてみよう
宿題
ifとswitchの動作比較のために作成したサンプルプログラム
“あるテストで80点以上の点数の場合は「合格」を、それ以外は不合格と表示するプログラム”について60点以下の場合は「不合格」ではなく、「赤点」と表示させるプログラムを作成してください。