以前説明した for ループは指定回数をループするという単純な場合に使われます。
ループにはもうひとつ while ループというものがあります。そのwhile ループとそっくりなものに do...while ループ、というものもあります。
他のループもありますが、大きな種類分けとして考えると for と while がある、という理解でよいでしょう。
for ループは以前の記事で説明してみました。
今回は while ループです。
簡単に説明してみます。
動作環境を整えるにはこちらを参考にしてください。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// [1-1] var i = 0; while (i <= 4) { console.log(i); i += 1; } // [1-2] var i = 0; while (i < 5) { console.log(i); i += 1; } // [2-1] var i = 0; do { console.log(i); i += 1; } while (i <= 4) // [2-2] var i = 0; do { console.log(i); i += 1; } while (i < 5) |
上記の全てのコードは「0 1 2 3 4」と 5行で表示されます。
while ループ
[1-1]と[1-2]は while ループです。
条件式が少しちがうだけで同じことを示していますね。
日本語として while を理解すると、「〇〇の間」となります。
つまり、上記のコード
while (i <= 4) {
これは「変数i が 4以下の間」ループしろ、という命令になります。
簡単ですよね。
do...while ループ
[2-1]と[2-2]は do...while ループです。
while が理解できれば、これもまた非常に簡単です。
do から while の間の内容を while で指定している条件の間だけループしろ、という命令です。
while ループ と、do...while ループの使い分け
このふたつは似ていますが、条件を判断する場所が違うだけです。
while はループに入る前に条件を判定します。
do...while はループの処理を行ったあとに判定します。
上の例では全く同じ動きしていましたが、書き方によっては while ループでは、ループ内の処理が1回も実行されない場合がありますが、do...whileループでは、最低でも1回はループ内の処理が実行されることになります。
例えばですが、与えられた配列データの長さが3以下の場合にはループを処理しない、とかいう場合には while で条件を判定したりしますし、データの中身を処理した上で何かの条件によってもうループを終わるという場合には do...while を使ったりします。
まあ、使う場面になったときにどっちかを使うという程度で理解しておくとよいでしょう。
while や do...while の while系ループと for ループの違い
どちらも似た処理が書けますが、while系と forループの違いは、回数指定してあるかどうかです。
上記の例では while で指定回数のループをしてしまっていますが、指定回数のループの場合は for を使っておくほうがわかりやすいです。for は指定回数ループ処理の場合にしか使えないのでそういう処理に使うものだとすぐにわかるからです。
while の方は指定回数のループもできますが、もう少し応用をきかせて何かの条件に一致したらループを続けるあるいはループを終わらせる、という処理を行う場合につかいます。
while では、break や continue も使える。
この記事の先頭でリンクしている for ループの記事の中で使っている break や continu という命令は while や do...while のループ内でも使うことができます。
break は処理を止める、
continue はループを飛ばして次のループを実行する
です。
while ではこんな風にかくこともできます。
1 2 3 4 5 6 7 8 9 10 11 |
// [3] var i = 0; while (true) { // 何かの処理A console.log(i); if (i >= 4) { break; } // 何かの処理B i += 1; } |
while (true) と記述すると無限ループにはまってしまってプログラムが永遠に終わらないことになるのですが、それを途中の if の条件によって break 命令をいれて止めることができます。
このように記述することで、ループの処理のどこでもループを終了させることができます。
こういうプログラムの書き方をしっていると、while 条件でループ実行前にループから抜ける条件を書いたり、do...while 条件でループ処理終了時にループから抜ける条件を書いたりということをしなくてもよいのがわかります。
つまり
1 2 3 |
while (条件) { // 何か処理 } |
という上記のコードは次のコードと同じ意味です。
1 2 3 4 |
while (true) { if (!条件) { break; } //何か処理 } |
また、
1 2 3 |
do { //何か処理 } while (条件); |
という上記のコードは次のコードと同じ意味です。
1 2 3 4 |
while (true) { //何か処理 if (!条件) { break; } } |
まあ、これらのどれを選ぶかは、なんとなくなセンスになってきますのでどれを書いてもいいよ。ということになります。
いろんな書き方ができて迷いますが、そういうものだと理解しておきましょう。
まとめ
while ループについて学びました。
いろんな書き方ができるので人によってどの命令をつかってループを書くのかのスタイルが違ってくるかもしれません。自分のスタイルを決まるくらいにたくさん書いて学ぶとよいでしょう。
例えば、自分は do...while の書き方は書かない!と決める事はできます。だだ、その場合でも他の人のプログラムを読みこなすときには文法を知っておく必要があるので知っておいてください。
私はなんとなく後日に読み直した場合に読みやすい形でループを書くようにしているので、その時々で変えたりします。
ご参考ください。