この動画はメンバー限定動画です

全ての講座が
月額990円で学び放題

講座の情報を見る

TypeScript入門サイコロで1が出るまで繰り返そう – while

記事を共有:

  • X
  • Pocket
  • クリップボードにコピー

前のレッスンでは、「100回サイコロを振る」というプログラムでした。そのため、もし100回とも1が出ない場合は、そのままプログラムが終わってしまいました。そこで今度は、次のようなプログラムにしてみましょう。

サイコロを1が出るまで繰り返し振る

この場合、for構文で作るのはあまり適していません。このような「何回繰り返すか分からない」という繰り返しを表現する場合に利用できるのが「while」構文です。次のようにプログラムを作成しましょう。

let dice: number = 0; // ひとまず0を代入しておく

while (dice !== 1) {
  dice = Math.floor(Math.random() * 6) + 1;
  console.log(dice);
}

これでプログラムを実行すると、何回かサイコロを振って1が出たらプログラムが終了するようになります。

次の部分を見てみましょう。

while (dice !== 1) {

while構文の場合、カッコの中には「繰り返す条件」だけが必要です。そのため、初期化や更新の処理は別の場所に記述する必要があります。今回の場合は、「dice」という変数に0を代入するのが「初期化」で、diceにサイコロの計算式を代入するのが「更新」になります。

無限ループに注意

while構文は、繰り返しが終わらない「無限ループ」状態に陥ってしまうことが多いので、気をつけてプログラムを書く必要があります。例えば、次のようにサイコロを振るプログラムを忘れてしまったとしましょう。

let dice: number = 0;

while (dice !== 1) {
  console.log(dice);
}

この時、「dice」は0が代入されたまま内容が変わらないため、while構文の条件が満たされ続けてしまいます。すると、このプログラムはずっと終了しない状態となってしまいます。

この状態で利用してしまうと、コンピュータのメモリなどを食い潰してしまうなど、危険名プログラムになり得るため、気をつけてプログラムを作成しましょう。

1回以上は繰り返すdo while

while構文の応用として「do while」構文というものもあります。while構文の場合、条件に最初から合わないと、「1回も実行されない繰り返し文」になります。例えば先の例を見てみましょう。

let dice: number = 0; // ひとまず0を代入しておく

while (dice !== 1) {
  dice = Math.floor(Math.random() * 6) + 1;
  console.log(dice);
}

この時、変数に最初に1を代入してみましょう。

let dice: number = 1; // ひとまず1を代入しておく

すると、while構文の「条件」に最初から当てはまらなくなってしまうため、繰り返し処理自体が1回も行われないまま、プログラムが終了します。

まれに、こうではなく「少なくとも1回はプログラムを動かしたい」というケースがあります。そんな時に使えるのが条件を後に記述できるdo while構文です。次のように記述できます。

let dice: number = 1; // ひとまず1を代入しておく

do {
  dice = Math.floor(Math.random() * 6) + 1;
  console.log(dice);
} while (dice !== 1);

こうすれば、少なくとも1回はサイコロを振ることができるようになります。ただ、do while構文が必要になるケースというのはあまり多くない上、ほとんどはwhile構文に書き換えることができます。

そのため、この構文はそれほど重要性は高くありません。

前のレッスン 次のレッスン