条件分岐
日々の暮らしの中で、人々は様々な状況の変化に対応して生活しています。予想していた通りの状況だけでなく、想定外のことが起きてしまうことも珍しいことではありません。例えば、以下のような経験は誰しも持っていることと思います。
- 美味しそうな料理を食べにレストランに行った。
- 混んではいなかった → 美味しく食べた。
- 長蛇の列だった、または定休日だった → 食べるのは諦めた。
- 外出していたら、突然雨が降ってきた。
- 傘を持っていた → 傘をさして、そのまま外にいた。
- 傘を持っていなかった → あわてて室内に入った。
- スマートフォンから着信音が鳴った。
- 部屋に一人でいた → 電話に出た。
- 電車に乗っていた → 着信を切った。
これらの例のように、その時の状況に応じて、次に行うべきことが変わってきます。ある条件を満たすかどうかで次に行うことを変化させることを「条件分岐」と呼びます。
ゲームのプログラムでは、「主人公のキャラクターと敵のキャラクターが衝突したか」といった条件が成立したかどうかで、次に行うことを変化させます。もし「おにごっこゲーム」であれば、衝突したときは「鬼に捕まった」としてゲームオーバーとすることになるでしょう。また、ロールプレイングゲームであれば、衝突したときは戦闘シーンに移行することになるでしょう。もし衝突していなかった場合は、特に何もせずに、ゲームで遊んでいる人からの指示を待つことになるかと思います。
Jasmine Tea では、条件分岐を行うために、主に if 命令を使います。if 命令は、以下のように使用します。
if 条件式1 then
条件式1が成立したときに実行したい命令1 - (1)
条件式1が成立したときに実行したい命令2
...
else if 条件式2 then
条件式2が成立したときに実行したい命令1 - (2)
条件式2が成立したときに実行したい命令2
...
else
条件式1と条件式2のどちらも成立しなかったときに実行したい命令1 - (3)
条件式1と条件式2のどちらも成立しなかったときに実行したい命令2
...
end if
if 命令では、条件式の評価結果が 0 か 0 以外かによって、次に実行する行が変わります。
- if 命令に書かれた条件式1の評価結果が 0 以外だったとき - (1) の行から else if, else, end if の直前の行までが実行される。
- if 命令に書かれた条件式1の評価結果が 0 で、else if 命令に書かれた条件式2の評価結果が 0 以外だったとき - (2) の行から else if, else, end if の直前の行までが実行される。
- if 命令に書かれた条件式1と else if 命令に書かれた条件式2の両方とも評価結果が 0 だったとき - (3) の行から end if の直前の行までが実行される。
具体的な例を紹介しましょう。以下のプログラムは、入力された数値によって、if 命令により条件分岐を以下のように行っています。
- 15 の倍数(5 と 3 の両方で割り切れる)だったときは "FizzBuzz" と表示する。
- 5 の倍数(5 で割り切れる)だったときは "Fizz" と表示する。
- 3 の倍数(3 で割り切れる)だったときは "Buzz" と表示する。
- 15, 5, 3 のいずれの倍数でなかったときは、入力された数値をそのまま表示する。
input "数を入力してください";v
if v%5=0 and v%3=0 then
print "FizzBuzz"
else if v%5=0 then
print "Fizz"
else if v%3=0 then
print "Buzz"
else
print v
end if
プログラムは上の行から順に実行されていきますが、上記のプログラムを実行すると、全ての行が実行されていないことがわかります。具体的には、数値変数 v が記憶している数値に依存して、以下のように実行されています。
- 変数 v の数値が 15 の倍数だったとき - 3 行目が実行され、5, 7, 9 行目は実行されない。
- 変数 v の数値が 5 の倍数だったとき - 5 行目が実行され、3, 7, 9 行目は実行されない。
- 変数 v の数値が 3 の倍数だったとき - 7 行目が実行され、5, 7, 9 行目は実行されない。
- 変数 v の数値が 15, 5, 3 のどの倍数でもなかったとき - 9 行目が実行され、3, 5, 7 行目は実行されない。
このように、プログラムにて条件式を使って条件分岐することで、行いたいことを限定することができます。