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の先頭に戻ります。