Jasmine Teaで繰り返す!

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

# はじめに

[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 の試用を開始してください。

# 順番に行ってもらおう

コンピューターは、プログラムに書かれた指示を順番に行っていきます。さっそく、以下のプログラムをエディターに入力してみてください。

```
print random(1,6)
print random(1,6)
print random(1,6)
print random(1,6)
print random(1,6)
print random(1,6)
print random(1,6)
print random(1,6)
print random(1,6)
print random(1,6)
```

[`random` 関数](https://jasminetea.app/docs/references/function-random) を使って1〜6までの乱数を求めて [`print` 命令](https://jasminetea.app/docs/references/command-print) で実行画面に表示する、ということを10行分書いています。

![スクリーンショット 2023-12-03 7.15.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/27a1b30c-710a-293d-29e9-37400af18fbf.png)!

では、実行してみましょう。エディターの下にある青色の「実行」ボタンを押してください。

![スクリーンショット 2023-12-03 7.16.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/223cb6a5-72af-2be6-d330-bfe47e427fab.png)

このように、複数の命令が順番に実行されることを「順次（実行）」と呼びます。順次実行は、プログラミングの基本中の基本です。「ただ順番に実行されるだけでしょ？」と思うことなかれ、その実行の順番を正しく把握し理解することが、プログラミングにおいてとても重要なことになります。

とはいえ、今回は同じことを10回行うだけだったので、 `print random(1,6)` を10回入力することは簡単でした。でも、これを1,000回、10,000回、1,000,000回以上やらないといけないとしたら... プログラムを手で入力していくことは困難です。

# 10回繰り返してみよう

コンピューターは計算が得意です。それだけでなく、実は多くのことをひたすら繰り返すことも得意です。プログラミングにおいて、「順次」と同じくらい便利で重要な仕組みとして、「繰り返し」があります。

では、まず先ほどの `print random(1,6)` を10回繰り返すプログラムを書いてみましょう。エディター内を一度全部消して、以下のプログラムを入力し直してください。

```
for i=1 to 10
  print random(1,6)
next
```

[`for` 命令](https://jasminetea.app/docs/references/command-for) は、 [`next` 命令](https://jasminetea.app/docs/references/command-next) と組み合わせて利用します。 `for` 命令で指示された回数分だけ、 `next` 命令が実行された時に `for` 命令に戻ります。つまり、 `for` 命令と `next` 命令の間にある命令群が繰り返し実行されます。

`for` 命令の後に書かれている `i=1` は、変数と呼ばれる箱に最初の数を入れて、その数が `10` になるまで（`to 10`） 繰り返す、という指示になるのですが、変数など含めて、もっと後で説明しようと思います。ここでは「1〜10 まで 10回繰り返される」ということを覚えてください。

![スクリーンショット 2023-12-03 7.57.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/681de372-5eab-a2a8-4879-f60eaa2f3f3b.png)

では、「実行」ボタンを押して、実行してみてください。

![スクリーンショット 2023-12-03 7.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/a50aeaad-2d54-2545-ba69-bd7fb41ae61c.png)

実行画面に乱数が10個表示されたことがわかります。先ほどは10行のプログラムでしたが、同じことを4行で実現できています。

では、`for` 命令に指定している `100` を `10000` に変更して、実行してみてください。

![for.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/820916ee-75f4-9c27-92c0-0538e7cea18a.gif)

実行画面の上を、なかなかの勢いで数字が流れていきました。実際には、乱数が 10,000 個表示されたことになります。

「乱数を10,000個表示して意味があるのか？」と言われると「ない！」ですが、例えば「1〜6それぞれの出現回数」を10,000回乱数を発生させて検証することで、6分の1の確率の分布を確認する、といった数学の確率統計で出てくる課題をシミュレーションできたりします。

このように、プログラミングにおいて「繰り返し」のテクニックを使うことで、コンピューターに何度も繰り返し仕事をしてもらうプログラムを効率的に書くことができます。

# ずっと繰り返してもらおう

`for` 命令を使うことで、決められた回数だけ繰り返すことができるようになりました。しかし、例えばゲームやアニメーションでは「ずっと繰り返される」という状況下でコンピューターにいろいろなことをお願いしていくことになります。

永遠に繰り返されることを「無限ループ」と呼びます。Jasmine Tea では、 [`do` 命令](https://jasminetea.app/docs/references/command-do) と [`loop` 命令](https://jasminetea.app/docs/references/command-loop) を組み合わせて、無限ループを実現することができます。

では、エディター内を全部消して、以下のプログラムを入力し直してください。

```
do
  print random(1,6)
loop
```

「実行」ボタンを押して、プログラムを実行してみてください。

![do-loop.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/ba5cd96d-e3a5-2bf8-1df3-bfdc619b9e70.gif)

先ほどと違って、待っても待ってもずっと乱数が流れ続けます。

`loop` 命令が実行されると、無条件に `do` 命令まで戻ります。これにより、`do` 命令と `loop` 命令の間に書かれた命令群が永遠と実行されることになります。

とはいえ、プログラムを止めないとプログラミングを進められません。実行しているプログラムを強制的に止めるには、以下の2つの手段があります。

* [ESPACE] [ESC] （エスケープ）キーを押す。
* 実行画面の下にある黄色の「止める」ボタンを押す。

これらにより、いつでもプログラムの実行を止めることができますので、ご安心ください。

# 明日は何をつくるの？

`for` 命令でちょっとだけ登場した「変数」について、明日は取り上げようと思います。変数を使うことで、より「コンピューターらしい」計算ができるようになります。

https://qiita.com/yoichiro6642/items/37e01c68f534b9da3bcb