今回は繰り返し文について書いていきます。
繰り返し文というのは呼んで字のごとく、同じ処理を繰り返し行いたい場合に使う文です。
例えば、
1,2,3,・・・100と1から順に数字を出力するとき。
document.write("1"); document.write("2"); ・・・ document.write("100");
と100回書くのではやってられません。
また
1+2+3+・・・+100と順番に計算するとき。
こちらも毎回書いてられないですよね。
こういったと気に繰り返し文を利用します。
色々種類があって5種類くらい書き方があるんですが、
3つくらい、まぁぶっちゃけ1個でもいいけど2個は知っておくと良いです。
繰り返し文は「条件に該当する(booleanのtrue)限り実行しつづける」が基本です。
その書き方が色々あるよーってものですね
■while文
書き方はこう書きます。
while(条件式){ 文 }
この{}は無くても動きますが、if文のときにも書いたように、
どこからどこまでがwhile文で実行する範囲かがわかりやすくなるのでつける癖をつけましょう。
内容自体はすごくシンプルです。
例えば一番初めに書いた例の
1,2,3,・・・100と1から順に数字を出力するとき。
を例にして書いてみましょう。
こんな風に書きます。
var count = 1; while(count <= 100){ document.write(count); count++; }
このように書くだけで、1,2,・・・100が出力されます。
上から順番に中身を説明します。
>var count = 1;
はじめにcountという変数に1を代入しています。
>while(count <= 100){
ここの条件式count <= 100ですが、countは現在1なのでtrueです。そのためwhile文に入ります。
> document.write(count);
このタイミングでcountは1なので1が出力されます。
> count++;
これはここでcountに1を足し算して!という内容です。そのためcountは2になります。
インクリメントといったりします。
>}
一旦のwhile文の終わりまで来たので、また初めに戻って、while(count <= 100){の確認をします。
このタイミングではcountが2なのでtrueです。そのため、また内容が実行されます。
この様にcount <= 100の条件を満たす限りずっと実行されます。
繰り返しているうちに101になり、そのタイミングでcount <= 100がfalseになるためwhile文の中身は実行されなくなります。
■無限ループには最新の注意を!
このときに注意したいのが無限ループです。
今回の式で間違えて
var count = 1; while(count <= 100){ document.write(count); }
こう書いたらどうなるでしょうか。
まず1が出力されます。ただし、count++が無く、countは増えないのでずっと1のままです。
こうなるとcount <= 100がfalseになるタイミングがなくなってしまい、
システムを停止するまで永遠に1を出力し続けます。
自分の書いたプログラムが異常終了するだけならいいんですが、
PCのメモリを食いつぶして他のシステムにも影響を与えたり、最悪PCがフリーズするなんてこともあるかもしれません。
繰り返し文を書くときは注意してください。
■do-while文
上で説明したwhile文とにているのですが、こんな風に書きます。
do { 文; } while(条件式)
while文と異なり、while(条件式)が下にあります。
できることは一緒なのですが、こちらの場合必ず文が一度は実行され、その上で条件式で判定します。
var count = 101; while(count <= 100){ document.write(count); count++; }
と書いた場合、countが101なのでdocument.write(count);は一度も実行されませんが、
var count = 101; do { document.write(count); count++; } while(count <= 100)
と書いた場合、document.write(count);は一度実行されます。
なので、中の文を一回は実行するということを担保したいときに利用します。
また、文を一回実行しないとwhile(条件式)の判定ができないときにもつかったりするみたいです。
とはいっても、do-while文を使わなくってもちょっとダサくはなりますが、
var count = 101; document.write(count); count++; while(count <= 100){ document.write(count); count++; }
って書いても同じです。
■for文
個人的には一番使う繰り返し文です。
for(初期化式; 条件式; 更新式){ 文; }
日本語で書くとちょっと訳がわからん、、、
セミコロン(;)で区切って、3つの式が続きます。見ればなんとなくわかるんじゃないでしょうか。
上の100まで繰り返し出力するものをfor文で書いてみます。
for(var i = 1; i <= 100; i++){ document.write(count); }
このようになります。
whileのときに書いた制御の変数をcountからiに変更しますが、
for(var i = 1; i <= 100; i++){
iを1で初期化して、iが i <= 100の間繰り返して、一度処理が終わるたびにi++する。
という内容になります。
このようにfor文の場合、一番初めに繰り返し制御の条件が全て書かれているので、
個人的には一番可読性が高いと思っています。
また、whileのときに無限ループの例で記載したcount++の書き忘れもfor文であればまず書き忘れません。
オススメです。
■for文ともう少し親しくなるために。
変数名がiでした。基本的には変数名にはcountのような意味のある文字列を使うほうがいいのですが、
for文の繰り返しの制御に使う変数(これをループ変数といったりします)はiを使うのが習慣になっています。
for文の中にfor文を書くこともできますが、この場合、一番外のループ変数がi、次がjのようになって行きます。
また上の文ではiを1で初期化しています。
出力する内容が1~100なので1で初期化しましたが、一般的に0で初期化するほうがプログラマー見慣れています。
そのため、「単純に10回なにか処理をする」という場合はこのように書きます
for(var i = 0; i < 10; i++){ 文; }
もちろん
for(var i = 1; i <= 10; i++){ 文; }
や
for(var i = 10; i < 20; i++){ 文; }
のようにかいても10回文を実行するという内容になりますが、上のほうが見慣れた形です。
(3つ目の例は屁理屈ですね。)
特に理由が無ければ上の書き方に慣れましょう。
ちょっと長くなりましたが、繰り返し文のwhile文、do-while文、for文について書きました。
他にもfor in文とかもあったりしますが、この3つを覚えておけば、まぁ困らないでしょう。
回数を実行する場合はfor文、何か他の条件を使う場合はwhile文を使えば使い分けとしてはいいと思います。
繰り返しになりますが、繰り返し文は無限ループに本当に注意しましょう。
次回はもうちょっとテクニカルな繰り返し文の技法について記載します。
コメント