繰り返しの種類
処理する内容によっては同じようなことを何度も行いたい場合があると思います。プログラムの話の前に日常生活でどんな繰り返したがあるか見てみましょう。
- コピーを100枚とる
- 毎朝8時に起きる
- 飽きるまでゲームをする
- 回転ずしで10皿食べる
- 回転ずしでお腹いっぱいになるまで食べる
- 回転ずしでサーモンが来たら食べる
あまり発想豊かな例ではないかもしれませんが繰り返しといってもいろいろな繰り返しがあることがわかります。ではこれらを分類してみましょう。
回数の決まった繰り返し
全部で何回繰り返すか最初に決まっている繰り返しです。大抵の場合は時間の指定はなく早く終わった方がいいことがほとんどです。
上の例でいうと
- コピーを100枚とる
- 回転ずしで10皿食べる
あたりがこのパターンです。
寿司のネタは好みがあるので目の前にある皿をなにも考えずに続けて10皿食べることはないかもしれません。しかし特別な好みがない限りはすぐに食べ終わるでしょう。
コピーについては普通は早く終わったほうがいいでしょう。特に好みや判断は必要なく本当に単純な繰り返しで仕事を終えることになるでしょう。
このタイプの繰り返しをプログラムで実現するには1回の処理が終わり次の処理を始める前に規定回数を超えているかを判断させます。
終わる条件の決まっている繰り返し
今度は回数は決まっていないけれど繰り返していくうちに何かの条件を満たしたことをきっかけに終了するという繰り返しです。
上の例では
- 飽きるまでゲームをする
- 回転ずしでお腹いっぱいになるまで食べる
がこれにあたるでしょう。
ゲームを好きなだけやるときには最初に何回やるか決まっていません。このため何回繰り返すかはやってみないとわかりません。
お腹いっぱいになるまで回転ずしを食べるというのも何皿食べるかは食べてみないとわかりません。お金の心配がないときでないと今度は経済的な条件で終了する可能性があるので事態は複雑になってしまいます。
このタイプの繰り返しをプログラムで実現するには1回の処理が終わり次の処理を始める前に終了条件を満たしていないかを判断させます。この終了条件を「回数達したか」と定義すると最初に挙げた繰り返しのパターンと同じになります。
一定の時間間隔で行われる繰り返し
終了条件は決まっていませんがある一定の条件を満たした時だけ実行します。実行した後はまた次に条件を満たすまで待ちます。
- 毎朝8時に起きる
- 回転ずしでサーモンが来たら食べる
8時に起きるという条件は「8時になるようにセットした目覚まし時計がなったときに処理を開始する」とも言い換えられるでしょう。人間の耳は「眠らない器官」とも言われ寝ている間でもずっと周りの情報を捉え続けているのだそうです。これをプログラムで実現するには「待ち」の状態を作り出します。
- 目覚ましがなっていれば待ちを終了
- 目覚ましがなっていなければ一定時間なにもしない
- 一番上に戻る
「待ち」の処理が終了することが朝起きることになります。その後1日の活動をして寝るときにまた「待ち」の状態に入ります。
コンピューター短い時間の間にたくさんの処理をしてしまうため意図的に「一定時間ないもするな」と命令する必要があります。そうでないと上の1と3をすごい速さで繰り返してしまいコンピューターの能力の占領してしまいます。
回転ずしのケースもサーモンが来るまで「待ち」の状態に入る点では一緒です。ただこちらは別の終了条件を追加しないとお腹を壊すかお金を使い果たすかしてしまうでしょう。
プログラムへの応用
このような繰り返しのパターンを整理してからプログラムを作成します。自分の実現したいことはどのような処理を使えばいいのかいきなりコードを書く前にじっくり構想を練ることが大事です。このような作業をデザインとか設計などと呼びます。繰り返しの処理のことを英語でloopと言います。紐で作った輪の意味です。