条件分岐

日々の暮らしの中で、人々は様々な状況の変化に対応して生活しています。予想していた通りの状況だけでなく、想定外のことが起きてしまうことも珍しいことではありません。例えば、以下のような経験は誰しも持っていることと思います。

  • 美味しそうな料理を食べにレストランに行った。
  • 混んではいなかった → 美味しく食べた。
  • 長蛇の列だった、または定休日だった → 食べるのは諦めた。
  • 外出していたら、突然雨が降ってきた。
  • 傘を持っていた → 傘をさして、そのまま外にいた。
  • 傘を持っていなかった → あわてて室内に入った。
  • スマートフォンから着信音が鳴った。
  • 部屋に一人でいた → 電話に出た。
  • 電車に乗っていた → 着信を切った。

これらの例のように、その時の状況に応じて、次に行うべきことが変わってきます。ある条件を満たすかどうかで次に行うことを変化させることを「条件分岐」と呼びます。

ゲームのプログラムでは、「主人公のキャラクターと敵のキャラクターが衝突したか」といった条件が成立したかどうかで、次に行うことを変化させます。もし「おにごっこゲーム」であれば、衝突したときは「鬼に捕まった」としてゲームオーバーとすることになるでしょう。また、ロールプレイングゲームであれば、衝突したときは戦闘シーンに移行することになるでしょう。もし衝突していなかった場合は、特に何もせずに、ゲームで遊んでいる人からの指示を待つことになるかと思います。

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 行目は実行されない。

このように、プログラムにて条件式を使って条件分岐することで、行いたいことを限定することができます。