Jasmine Teaで条件分岐!

この記事は、 [Jasmine Tea アドベントカレンダー 2023](https://qiita.com/advent-calendar/2023/jasminetea) の第6日目です。

# はじめに

[Jasmine Tea](https://jasminetea.app) (ジャスミンティー) は、プログラミングの楽しさを多くの人に知ってもらうために作られたプログラミング言語です。初心者が学びやすい仕組みで、実際に社会で使われている多くのプログラミング言語に応用できる基礎が身に付きます。

ここでは、Jasmine Teaを実際に開いて、状況に応じてプログラムの動作を変化させる方法について紹介しようと思います。

まず、Studio 画面を開いてください。もし Studio 画面をまだ開いたことがなければ、 [Studio画面を表示する - Jasmine TeaでHello, world!](https://qiita.com/yoichiro6642/items/3dc478726f4f73941b46#studio%E7%94%BB%E9%9D%A2%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B) を参考にして Jasmine Tea の試用を開始してください。

# プログラムは「状況が刻々と変わる」

コンピューターに様々なことをやってもらうために、何をどういった順番でやってもらうかを記載したプログラムを作ります。「最初にこれをやって、次にあれをやって、その次にそれをやって、...」といった「命令を順番に並べて実行してもらう」という順次実行が基本となります。

そうやって複数の命令をコンピューターに行ってもらっているときに、コンピューターの中では状況が刻々と変わっています。「状況が刻々と変わっている」とは一体なんのことを言っているのか、ピンとこないかもしれません。

例えば、以下のプログラムを考えてみましょう。

```vb
face=random(1,2)
```

Jasmine Teaでこのプログラムを実行すると、変数 `face` には [`random` 関数](https://jasminetea.app/docs/references/function-random) によって `1` か `2` のいずれかの数が代入されます。

はい、ここで、状況に変化が起きました。

* 変数 `face` が記憶している数が変化した。

ということです。

昔、ブランコに乗りながら、履いている靴を飛ばして、地面に落ちた靴が「上を向いていたら明日は晴れ」「下を向いていたら明日は雨」なんてことをした経験はありますか？靴が上を向いているか、ひっくり返っているか、それは基本的には2分の1の確率です。

まさに、変数 `face` の数が `1` だったら「明日は晴れるでしょう」と表示し、`2` だったら「明日は雨が降るでしょう」と表示するプログラムを作りたいとしたら... その時の状況に応じて、実行したい命令が変わってくることになります。

このように、状況に応じてプログラムの動作を変化させることを「条件分岐」と呼びます。

# `if` 命令を使って条件分岐してみよう

Jasmine Teaでは、条件分岐をするために、[`if` 命令](https://jasminetea.app/docs/references/command-if) を使います。では、Studio画面の左にあるエディターに、以下のプログラムを入力してください。

```vb
face=random(1,2)
if face=1 then
  print "明日は晴れるでしょう"
end if
```

2行目の `if` 命令の後ろに、`face=1 then` と書かれています。この中の `face=1` は、「条件式」と呼ばれています。「え、変数に代入する書き方ではないの？変数 `face` に `1` を代入するんじゃないの？」と思った方もいらっしゃるかもしれません。はい、そう思ってしまっても仕方ないです。

変数に数が代入されるときは、以下のように「プログラムの対象の行に `face=1` とだけ書かれたときだけ」です。

```vb
face=1
```

それに対して、命令の後ろに書くことになる「式」で `=` 記号を使ったときは、「右辺と左辺が等しいかどうか」を確認する式になります。

つまり、`if face=1 then` を日本語に直すと、「変数 `face` に代入されている数が `1` だったら」となります。

![Screenshot_20231206_103948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/08c07255-a35f-9955-f9ca-5855a5dfa1fc.png)

4行目に `end if` 命令が書かれています。`if` 命令から `end if` 命令の間の行に書かれた命令が、条件式が成立したときに実行されます。ここでの条件式は `face=1` なので、変数 `face` に代入されていた数が `1` だったときのみ、3行目の `print "明日は晴れるでしょう"` が実行されます。

では、プログラムを実行してみましょう。エディターの下にある青色の「実行」ボタンを押して、プログラムを実行してみてください。そして、「実行」ボタンを何度か押して、プログラムを何回か実行してみてください。

もし変数 `face` に `1` が代入されていたときは、実行画面には以下のように表示されます。

![Screenshot_20231206_111336.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/14ee7b57-41d7-06e2-55b1-b9f3ee477cc0.png)

一方、変数 `face` に `2` が代入されていたときは、実行画面は以下のようになります。

![Screenshot_20231206_111356.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/bb1edaf0-0f62-4efb-2328-9d0b61acb190.png)

状況に応じて命令を実行したりしなかったりすることができるようになりました。

# 条件式が成立しなかったときにも対応しよう

投げた靴が上を向いていたとき、つまり変数 `face` に代入された数が `1` のときに「晴れ」を表示できるようになりました。しかし、上記のプログラムでは、`2` が代入されたときに「雨」と表示できていません。

`if` 命令に書いた条件式が成立しなかったときに実行したいことがある場合は、`else` 命令を組み合わせて実現します。では、エディターの3行目と4行目の間に、以下のプログラムを追記してみてください。

```vb
else
  print "明日は雨が降るでしょう"
```

エディターには以下のようにプログラムが入力されているはずです。

![Screenshot_20231206_112927.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/1060753b-7e2a-2699-62cd-4bbd8192a5a6.png)

`if` 命令は、条件式が成立しなかったときは、`else` 命令の次の行にジャンプします。つまり、変数 `face` に `2` が代入されていたときは、3行目は実行されずに、5行目の `print "明日は雨が降るでしょう"` が実行されます。

また、`if` 命令に書かれた条件式が成立したときは、3行目の `print "明日は晴れるでしょう"` が実行されますが、次の行は `else` 命令ですので、`end if` 命令までジャンプします。これにより、条件式が成立されたときは、5行目は実行されません。

では、実行してみましょう。「実行」ボタンを押して、プログラムを何度か実行してみてください。

![Screenshot_20231206_113351.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/225be1d3-2913-14da-01a1-c5620c4f22d7.png)

「晴れ」だけでなく、「雨」も表示されるようになりました。これで、天気予報プログラムの完成です。

もちろん、このプログラムの実行結果として表示される天気予報は、何ら天気を保証するものではありませんので、ご注意ください。

# 明日は何をつくるの？

プログラミングは、「順次」「繰り返し」「条件分岐」の3つから成り立っています。この3つにより、世界中のほとんどの命題はプログラミングが可能であると言われています。今回は、その中の「条件分岐」を紹介しました。この3つが理解できれば、あなたもプログラマーの仲間入りを果たしたと言えるでしょう。

明日は、見た目に派手なプログラムである、コンピューターグラフィックスを取り上げる予定です。

https://qiita.com/yoichiro6642/items/f718ad1bb58c507599d4