繰り返し ~ プログラムが魔法でないとわかればプログラマになれる 18

繰り返しは「条件」なしに使えない

プログラムの重要な動きの一つに 繰り返し があります。繰り返しとは同じことを何度もすることです。日本語で考えてみましょう。例えば、国語の先生に「川という漢字を繰り返し書きなさい」と言われたとします。何度も何度も「川」を書け、という意味です。ではいったい何回書けば先生は許してくれるでしょうか。

人間であれば「まさか100年書き続けろとは言わないだろう」といった常識がありますので「十分と思えるくらい書いたらやめても良いだろう」と勝手に判断します。ですがコンピューターに同じ命令をした場合、どのくらい繰り返せば良いのかわかりません。そのためプログラムで繰り返しを使う場合は「繰り返しをいつまで続けるべきか」を必ず指定しなければなりません。

それでは実際の繰り返しの書き方をみてみましょう。

while (条件) { 条件が成立する場合に動かす命令 }

while は「〜の間は」という意味の英単語です。プログラムでは「条件が成立している間は { } の中の命令を繰り返す」という意味になります。今までのプログラムは上から下に進むだけでしたが 繰り返し は下から上に戻る性質がありますので詳しくみていきましょう。

1. コンピューターは while という命令を見つけると次の ( ) の中の条件が成立するかどうかを確認する

2. 成立しない場合は { } の中の命令は飛ばして } の次の命令に進む

3. 成立する場合は { の中に進む

4. } を見つけるまで1つずつ命令を動かす

5. } まで進んだら ( ) の中の条件が成立するかどうかを確認する → 2に戻る

2〜5 が繰り返しになります。 ( ) の中の条件が成立しなくなるまで何度も { } の中の命令が動きます。

while (true) {
    alert("こんにちは");
}

このプログラムを動かすと永遠に「こんにちは」と表示され続けます。ウェブブラウザで実際に動かすと止められなくなりますので動かさないようにしてください。 まったく無意味なプログラムですが説明には向いています。true は成立するかしないかを表す特別な単語です。成立しないことを表す場合は false を使います。ここでは true を使っていますから ( ) の中の条件が必ず成立することになります。このプログラムの動きを順に追うと、 while が見つかる → ( ) の中を確認する → 成立するので { の中に進む → alert(); の命令が動く → ( ) の中を確認する → 成立するので { の中に進む → alert(); の命令が動く → … と永遠に続きます。「無限ループ」と呼ばれるものです。

繰り返しが永遠にならないためにはどうすれば良いでしょうか。繰り返しの度に 条件 は何度も確認されますが、どんなに繰り返しても条件が同じであれば繰り返しが終わることはありません。つまりどこかで条件を 成立しないものに変える 必要があります。

let count = 1;

while (count <= 3) {
    alert(count);
    count = count + 1;
}

このプログラムを動かすと「1」と表示され次に「2」と表示され最後に「3」と表示されて終了します。無限ループになりません。

最初に count の指す内容を 1 としています。 while の条件は「count <= 3」ですから「countが3以下なら成立」という意味です。 count1 ですので成立します。 { の中の命令に進み、 alert() の命令が動き画面に「1」と表示されます。次の行がポイントです。

count = count + 1;

+ がありますのでまず計算が先に行われます。 count1 を指していますから「count + 1」は「1 + 1」の意味になります。「1 + 1」の計算結果は 2 です。この命令は結局「count = 2」と同じ意味になります。 let count という名前を使えるようにしましたが let を使った場合、名前が指す内容をいつでも他のものに変更できる、という性質があります。つまりここでは count の内容が 2 になるように置き換えています。このように繰り返しを行う度に count が1ずつ増えていくプログラムになっているわけです。

繰り返しを続ける条件は「count <= 3」です。 count4 以上になると条件は成立しなくなり繰り返しが終わります。

もっと直感的に「3回繰り返して」と書きたいと思います。ですがプログラムはそのようになっていません。それは条件が常に回数とは限らないからです。1分経つまで繰り返す、ファイルを全て読み込むまで繰り返す、など様々な条件に対応できなければなりません。ですので「条件が成立する間は繰り返しを続ける」としておいて 条件 は自由に作れば良い、となっているのです。

>>続きを読む
>>全記事を見る

<最新話にご興味があればフォローお願いします>

この記事が気に入ったらサポートをしてみませんか?