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