8.制御構文 – 条件分岐
EAを作成する上で最もよく使われる構文は恐らく条件分岐です。
もし〇〇なら〇〇し、そうでないなら〇〇する、というのが条件分岐です。
条件分岐は、比較演算や論理演算を使用して、その結果がtrueかfalseかで処理を分岐させます。
条件分岐を書くにはいくつかの方法があります。
if – else文
if – else文は、条件式を1つ評価し、これを満たした時の処理とそうでない時の処理の分岐を行います。
if(a>10) { Print("aは10より大きい"); } else { Print("aは10以下"); }
処理が分岐した場合、分岐しなかった方の処理は実行されません。
上記であれば、aの中身によってどちらか一方のPrint処理しか行われません。
下記のようにすれば、3つ以上の分岐を作ることもできます。
if(a>20) { Print("aは20より大きい"); } else if(a>10) { Print("aは10より大きい"); } else { Print("aは10以下"); }
else if~を増やすことで、いくつでも分岐が可能です。
注意点として、if – elseは上から順に条件式が評価されることです。
下記のような場合を考えてみましょう。
if(a>10) { Print("aは10より大きい"); } else if(a>20) { Print("aは20より大きい"); } else { Print("aは10以下"); }
変数aの中身が100だった場合、2行目のPrint処理が行われます。
1行目の条件式を満たしたため処理が分岐し、それ以降の条件式は評価されません。
1行目の条件式を満たさない場合は、続いて3行目の条件式を評価しますが、その時は”1行目の条件式が否定されている”という条件も含まれることになります。
このように複数の条件式を並べる場合は、意図的にそうしている場合を除いて、より条件の厳しいものから順に記述するのが普通です。
また、elseが無くifのみのパターンもあります。
if(a>10) { Print("aは10より大きい"); }
特定の条件を満たす時だけ追加で処理を行い、そうでない時には何もする必要がないという場合は、シンプルなif文のみで完結します。
switch文
switch文は、変数の中身によって処理を分岐させます。
switch(a) { case 1: Print("aは1"); break; case 2: Print("aは2"); break; default: Print("それ以外"); }
上記は変数aの値が1であれば3行目、2であれば6行目、それ以外であれば9行目のPrint処理が実行されます。
switch()に書かれた変数の値と、caseの後に書かれた値が等価であるかの評価が行われています。
どれにも一致しなかった場合は、defaultの後に書かれた処理が実行されます。
※defaultは省略することもできます。
4行目と7行目のbreak;は、処理を抜けるという意味を持っています。
break;を書かなかった場合にどのように表示されるかを見てみましょう。
switch(a) { case 1: Print("aは1"); case 2: Print("aは2"); default: Print("それ以外"); }
break;を記述しなくても間違いではありません。
上記のような場合、aが1の時に表示されるのは、
aは1 aは2 それ以外
となります。
またaが2の時に表示されるのは、
aは2 それ以外
となります。
一致したcaseがあった場合、それ以降のcaseの評価は行われず、それ以降の処理が全て実行される仕組みになっています。
処理を止めたい場合のみbreakし、そうでない場合は続けて処理を行う事ができるので、if – else文よりも少し複雑な分岐処理をスマートに書くことが可能です。
例えば、
switch(敵) { case 雑魚: 通常攻撃 break; case ボス: バフ case 中ボス: デバフ 呪文攻撃 break; default: 特技攻撃 }
のようになっている場合、
- 雑魚には通常攻撃
- ボスにはバフ→デバフ→呪文攻撃
- 中ボスにはデバフ→呪文攻撃
- それ以外には特技攻撃
という分岐処理になります。
三項演算子
条件分岐とは少し趣が違いますが、三項演算子という演算子を使って、条件によって変数に代入する値を変えることができます。
三項演算子は、
条件式 ? 真(true)の場合 : 負(false)の場合
という書き方をします。
改行を入れて、
条件式 ? 真(true)の場合 : 負(false)の場合
と書くのもありです。
int number = a > 10 ? 1 : 2;
int型の変数numberには、aが10より大きければ1、そうでなければ2が代入されます。
三項演算子は何となく理解しづらいと敬遠されることもありそうですが、便利な演算子です。
三項演算子を組み合わせて、さらに分岐させることもできます。
int number = a >= 100 ? 10 : a+b >= 100 ? 9 : b >= 60 ? 8 : 7;
この場合numberに代入されるのは、
- aが100以上なら10
- a+bが100以上なら9
- bが60以上なら8
- それ以外なら7
となります。
個人的に、三項演算子は改行があった方が読みやすいです。
以上が条件分岐です。
次回は、条件分岐と同様に非常によく使う制御構文、ループを解説します。