switch文

switchで枝分かれ

switchとは

変数キーの内容によって、処理を変える記述です。
出力パネルには「BはBravoのB」と表示されます。

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

 if( key == "A" ) {
	message = "AはAlphaのA";
 } else if( key == "B" ) {
	message = "BはBravoのB";
 } else if( key == "C" ) {
	message = "CはCharlieのC";
 } else {
	message = "知らない文字です";
 }
 trace( message );


このように if文を使って書いてもよいのですが、switch を使うこともできます。

switchの基本ルール
 var key:String = "B";
 var message:String;

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


if文以外にも「switch文」を利用して条件分岐することができます。



switch( セグメントA ){
 case セグメントB :
     セグメントAとセグメントBが同じときに行う処理
 case セグメントC :
     セグメントAとセグメントCが同じときに行う処理
 case セグメントD :
     セグメントAとセグメントDが同じときに行う処理
 default :
     上のcase文のどれにも当てはまらないときに行う処理
}

※defaultは、省略可能です。

  • case文のある行は、「:コロン」で終わっていなければならない。

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 = "知らない文字です";
}
trace( 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;
trace("年齢=" + age);//年齢の表示

//正しく機能する例
trace("-------------------------");
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;
}

//正しく機能しない例
trace("-------------------------");
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;
}
trace("-------------------------");

break文

  • 繰り返す処理を途中で抜ける
i = 0;
while ( i <= 100 ){
    trace( i );
    if( i == 3 ){ break; }
    i++;
}


※3を表示した直後、繰り返しからぬけます


continue文

  • 繰り返しの途中で繰り返しの先頭に戻る命令
for( i = 0; i < 5; i++){
    if(i >= 2){ continue; }
    trace(i);
}


※ i が2以上の時continue文が実行されforの先頭に戻ります。

default;
  • どのcase文の値にも一致しない場合は「default;」へジャンプ
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>switch文で月を判定する</title>
</head>
<body>
<script>
var month;

function season() {
month = prompt('月を入力してください', '1から12の値を半角数字を入力');

month = Number(month);
switch(month) {
  case 12:
  case 1:
  case 2:
    document.write("<h1>冬です。</h1>");
  break;
		
  case 3:
  case 4:
  case 5:
    document.write("<h1>春です。</h1>");
  break;

  case 6:
  case 7:
  case 8:
    document.write("<h1>夏です。</h1>");
  break;
		
  case 9:
  case 10:
  case 11:
    document.write("<h1>秋です。</h1>");
  break;
		
  default:
    document.write("<h1>1から12の値を入力してください</h1>");
}

}
</script>
<h1>月別に季節を判別</h1>
<p>ボタンをクリックすると月を入力するウインドウが表示されます。</p>
<p><button onclick='season()'>月別に季節を判別する</button></p>
</body>
</html>
繰り返し処理
  • 「i++」を記述
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>繰り返し処理</title>
<script>
var i = 1;
function ans(){
  switch (i){
    case 1:
      alert("【ヒント】北海道は県ではありません");
      break;
    case 2:
      alert("【ヒント】東北地方にある県です");
      break;
    default:
      alert("答えは岩手県です");
  }
i++;
}
</script>
</head>
<body>
<h3>(問題)</h3>
<p>日本で最も面積が大きい“県”は何県でしょう?</p>
<p><button onclick="ans()">答えを見る</button></p>
<p>
※ボタンのクリックが2回までの間はヒントが表示されます。<br>
※ボタンを3回以上クリックすると、答えが表示されます。
</p>
</body>
</html>