まとめ(4)switch文

switchとは

  • if文と同様に分岐処理を行います
  • if文を簡略化してよりすっきり記述するための構文です
  • ある変数の中身が一致するかという判断を行います



switch(変数) {
  case 値1:
   変数の中身が値1に一致した場合の処理
  case 値2:
   変数の中身が値2に一致した場合の処理
  case 値3:
   変数の中身が値3に一致した場合の処理
  default:
   どの値にも一致しなかった場合の処理
}


switch文は、いずれかの値に一致すると以降の処理がすべて実行されるという特徴があります。


《switch文の特徴》

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>switch文の特徴</title>
</head>
<body>
<script>
  var a = 2;
  switch(a) {
    case 1:
      console.log('aは1です');
    case 2:
      console.log('aは2です');
    case 3:
      console.log('aは3です');
    default:
      console.log('一致なし');
  }
</script>
</body>
</html>

《実行結果》

if文とswitch文の使い分け

if とどこが違う?

switchでcaseに分岐する条件は、値が一致するかどうかです。
 if( a == 1 )
のような、条件に「一致」を使う if文、else if文が続いたときには、switch文に書き換えたほうが見やすくなります。
ただし、より大きい、より小さいなどといった比較を分岐の条件にはできないので、そういうときには、if文を使うしかありません。


if文を利用した場合


if(diece == 1){ //1のときの処理
} else if( diece == 2 ){ //2のときの処理
} else if( diece == 3 ){ //3のときの処理
} else if( diece == 4 ){ //4のときの処理
} else if( diece == 5 ){ //5のときの処理
} else if( diece == 6 ){ //6のときの処理
}


switch文を利用した場合


switch(diece){
 case 1: //1のときの処理
     break;
 case 2: //2のときの処理
     break;
 case 3: //3のときの処理
     break;
 case 4: //4のときの処理
     break;
 case 5: //5のときの処理
     break;
 case 6: //6のときの処理
     break;
}

  1. switch文では、分岐のために使う変数を()の中に書きます。
  2. 「caseキーワード」を使って、比較する値を書きます。「: コロン」を忘れないように。
  3. 変数がその値と一致したときにおこないたい処理文を書きます。
  4. 処理は何行でも書くことができます。
  5. 最後に「breakキーワード」を使って、処理を打ち切ります。
breakを忘れると

以下が、break文を書き忘れた例です。
switch文はどう動くでしょうか。

var key:String = "B";
var message:String;

switch( key )
{
	case "A":
		message = "AはAlphaのA";
	case "B":
		message = "BはBravoのB";
	case "C":
		message = "CはCharlieのC";
	default:
		message = "知らない文字です";
}


switch文は、case "B"を見つけてジャンプします。
 message = "BはBravoのB";
が実行されます。そして続けて
 message = "CはCharlieのC";
が実行され、さらに続けて
 message = "知らない文字です";
も実行されてしまいます。
結局、出力パネルには「知らない文字です」と表示されてしまいます。
breakがないとswitchのコードブロックから脱出できません。
breakは、書き忘れないようにしましょう。

switch文で範囲を条件にしたいとき
/*
範囲による条件分岐の確認

switch文において、範囲で条件分岐させることはtureと条件式を
利用することで可能ですが、条件式の順番に気をつけないと
期待どおりに処理されません。

はじめのswitch文と2つめのswitch文にあるcase文の条件式は
まったく同じで、ただ条件式の順番が異なります。

処理結果は、はじめのswitch文では正しく処理できますが
2つめのswitch文では正しく処理できません。
これは、処理が上から順に実行されるために起こる問題です。

範囲を判定するときには、条件式の順番も注意深く設定しましょう。
*/

var age:Number = 5;

//正しく機能する例
switch ( true ) {
	case (age < 10)://10才未満の処理
					trace("10才未満です");
					break;
	case (age < 20)://10代の処理
					trace("10代です");
					break;
	case (age < 30)://20代の処理
					trace("20代です");
					break;
	case (age >= 30)://30代以上の処理
					trace("30代以上です");
					break;
}

//正しく機能しない例
switch ( true ) {
	case (age >= 30)://30代以上の処理
					trace("30代以上です");
					break;
	case (age < 30)://20代の処理
					trace("20代です");
					break;
	case (age < 20)://10代の処理
					trace("10代です");
					break;
	case (age < 10)://10才未満の処理
					trace("10才未満です");
					break;
}

break文

  • 繰り返す処理を途中で抜ける