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;
}
- switch文では、分岐のために使う変数を()の中に書きます。
- 「caseキーワード」を使って、比較する値を書きます。「: コロン」を忘れないように。
- 変数がその値と一致したときにおこないたい処理文を書きます。
- 処理は何行でも書くことができます。
- 最後に「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の先頭に戻ります。