• 締切済み

条件分岐の記述方法

FlashのActionScript3にてプログラムを書いています。 "kazu"という変数があり、その値に応じて処理を分けているのですが、 そのkazuが、例えば2, 7, 13, 26, 35の時は、●●の処理を行う という感じのプログラムになっています。 ↓このような感じ ------------------------------------------------------------ if(kazu == 2 || kazu == 7 || kazu == 13 || kazu == 26 || kazu == 35){  処理 } ------------------------------------------------------------- ※「 || 」は「or(又は)」の意味 kazuの値は例えば1~100の間で変動し、 上記のように規則性がなく、任意の値、任意の数(個数)で処理をさせたいのです。 この記述で特に問題なく動作するのですが、 これをまとめて記述する方法ってありますか? 上記ではkazuの種類が5種なので、この程度の記述で済みますが これが、例えば10~20種になった時 ------------------------------------------------------------ if(kazu == 2 || kazu == 7 || kazu == 13 || kazu == 26 || kazu == 35 || kazu == 36 || kazu == 37 || kazu == 38 || kazu == 39 || kazu == 40){  処理 } ------------------------------------------------------------- ※横に長くなるので、あえて2行にしています。 のように、記述が長くなるので まとめて記述できるような書き方があるのかどうか教えていただければと思います。 よろしくお願いします。

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

考えようによっては 方法は色々とあると思います。 方法案をいくついか回答します。 (最後の方に行くほど変な方法だと思いますが。。。) ◎ 方法案1-1 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr に OR条件該当値 を設定 var kazu_arr:Array = [2,7,13,26,35,36,37,38,39,40]; //配列 kazu_arr の要素数分ループ for (var i:int = 0; i < kazu_arr.length; i++) { //もし kazu が kazu_arr[i] の値と等しいとき if (kazu == kazu_arr[i]) { trace("処理"); //この for 文を抜ける break; } } //============================================= ◎ 方法案1-2 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr に OR条件該当値 を設定 var kazu_arr:Array = [2,7,13,26,35,36,37,38,39,40]; //配列 kazu_arr 内の要素の値を走査 for each (var num:int in kazu_arr) { //もし kazu が kazu_arr のいずれかの要素の値と等しいとき if (kazu == num) { trace("処理"); //この for each..in 文を抜ける break; } } //============================================= ◎ 方法案1-3 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr に OR条件該当値 を設定 var kazu_arr:Array = [2,7,13,26,35,36,37,38,39,40]; //kazu_arr の要素を「@」で連結した文字列を //文字列化した kazu でセパレートして配列にしたとき //その要素数が 2 以上であれば if (kazu_arr.join("@").split(String(kazu)).length >= 2) { trace("処理"); } //============================================= ◎ 方法案2 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //文字列 kazu_str に OR条件該当値 を設定 var kazu_str:String = "2,7,13,26,35,36,37,38,39,40"; //文字列化した kazu が 文字列 kazu_str 内にあれば if (kazu_str.indexOf(String(kazu),0) != -1) { trace("処理"); } //============================================= ◎ 方法案3 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //オブジェクト kazu_obj の OR条件該当値キー に 1 の値を設定 var kazu_obj:Object = {2:1,7:1,13:1,26:1,35:1,36:1,37:1,38:1,39:1,40:1}; // kazu_obj の kazu キー が 1(true) であれば if (kazu_obj[kazu]) { trace("処理"); } //============================================= ◎ 方法案4-1 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr の OR条件該当値 の要素に 1 を設定 var kazu_arr:Array = [0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1]; //もし kazu_arr[kazu] が 1(true) であれば if (kazu_arr[kazu]) { trace("処理"); } //============================================= ◎ 方法案4-2 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr の OR条件該当値 の要素に true を設定 var kazu_arr = new Array(); kazu_arr[2] = kazu_arr[7] = kazu_arr[13] = kazu_arr[26] = kazu_arr[35] = kazu_arr[36] = kazu_arr[37] = kazu_arr[38] = kazu_arr[39] = kazu_arr[40] = true; //もし kazu_arr[kazu] が true であれば if (kazu_arr[kazu]) { trace("処理"); } //============================================= ◎ 方法案5 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //変数「"k"+OR条件該当値」を Boolean 宣言 var k2:Boolean,k7:Boolean,k13:Boolean,k26:Boolean,k35:Boolean,k36:Boolean,k37:Boolean,k38:Boolean,k39:Boolean,k40:Boolean; //もし変数「"k"+kazu」 が未定義でなければ if (this["k" + kazu] != undefined) { trace("処理"); } //============================================= ちなみに..., ご質問されているような内容は [技術者向] コンピューター> プログラミング > Flash カテゴリに質問される方が良いように思いますよ。

pory_bekk
質問者

お礼

丁寧にいろんなパターンを考えていただき ありがとうございます。 やはり、基本的には配列を用意する方法になりますよね・・・。 最初から念頭にはあったのですが、例えば ----------------------------------- if(kazu == 2,7,13,26,35){ 処理 } ----------------------------------- のような書き方で、"構文的に"簡単にまとめる事が できるのかな?(そういう書き方があるのかな?)と思った次第です。 今回は構文というよりは、考え方自体を変える必要があったようですね。 ご提示いただいたソースを元に色々試してみます。 ありがとうございました。 また、カテゴリーの指摘もありがとうございました。 次回からはそちらで質問させていただきます。