switch文とfor文

switch文とは

変数キーを使って、処理を変える記述

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);

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でcaseに分岐する条件は、値が一致するかどうかです。
if(a==1)
のような、条件に「一致」を使うif文、elseif文が続いた時には、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キーワード」を使って、処理を打ち切ります。
    • 変数から該当するcaseを見つけて処理をさせる。
    • 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";
}
trace(message);

switch文は、case"B"を見つけてジャンプする。
message="BはBravoのB";
を実行、
続けて、
message="CはcharlieのC";
ブロック内の処理を続けていく・・breakで止める

switch分で範囲を条件にしたい時
/*範囲による条件分岐の確認
switch分において、範囲で条件分岐させる事はtrueと条件式を利用する事で可能ですが、条件式の順番に気をつけないと期待通りに処理されない。
始めのswitch分と2つめのswitch分では正しく処理出来ますが、2つめのswitch文では正しく処理出来ない。
これは、処理が上から順に実行されるために起こる。
範囲を判定する時には、条件式の順番も注意深く設定する。
*/

var age:Number=5;
trace("年齢="+age);//年齢の表示

//正しく機能する例
trace("----------");
switch(true){
case(age<10)://10歳未満の処理
trace("10歳未満です");
break;
case(age<20)://20代の処理
trace("10代です");
break;
case(age<30)://30代の処理
trace("10歳未満です");
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("----------");


二番目が間違っている理由は、上から順に実行されるため。
age:Number=5は
age<20に含まれる。traceの後breakで終了してしまう。

break文

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

i=0;
while(i<=100){
trace(i);
if(i==3){break;}
i++;
}


※3を表示した直後、繰り返しから抜ける

continue文

繰り返しの途中で繰り返しの先頭に戻る命令

for(i=0;i<5;i++){//iの初期値0、iが5未満の間、iは1ずつ増える(5回繰り返し)
if(i>=2){continue;}//iが2以上の時、forの最初に戻る
trace(i);
}


・・・0、1でおわる(繰り返されない)のはなぜ?

for文の繰り返し条件が
途中で成立しなくなったら繰り返しはしないから(?)