JavaScriptのwhile文について書いています。
最初にwhile文の使い方を、実際に動作するプログラムと一緒に解説しています。
その後に、while文の下記について書きました。
・while文を抜ける方法(break)
・while文でループ中にスキップする(continue)
while文の使い方
JavaScriptのwhile文は、条件が合っている間(trueのとき)、whileブロック内の処理がループできる構文です。
例えば、下記にように使うことができます。
let count = 0
while (count < 10) {
console.log(`count value: ${count}`);
count++;
}
最初にcount
変数に数値の「0
」を代入しています。
次の処理で、while文を使っています。
丸括弧「()
」の中に条件を書きました。
条件として「count < 10
」を指定しています。
count
変数が10になるまでの間、波括弧「{}
」の中の処理をループします。
ループ処理では、console.log
で文字列の「count value:
」とcount
変数の値を一緒に出しています。
その後にcount
変数の値をひとつ足しています。
こうすることで、count
変数の値が0から9まで足されていきます。
そして、10になると、条件に合わなくなるのでループを抜けます。
プログラムを実行すると、下記のように結果が出力されました。
0から9までの10回、ループ処理されていることが確認できました。
count value: 0
count value: 1
count value: 2
count value: 3
count value: 4
count value: 5
count value: 6
count value: 7
count value: 8
count value: 9
while文の無限ループとは?
while文の無限ループは、条件がずっと合っている(true)の状態になってしまい、ループが終わらないことです。
例えば、下記のようにカウントアップを忘れると、無限ループになってしまいます。
let count = 0
while (count < 10) {
console.log(`無限ループ!! ${count}`);
}
最初のプログラムを少し変えて、count
変数を足している箇所を削除しました。
このようにcount
変数の値が変わらない状態だと、count
変数の値はずっと「0」のままです。
そのためwhile文の条件が、いつまでも合っている状態(true
のまま)になり、ループ内の処理がずっと繰り返されます。
このようなバグを作り出さないためにも、条件文の箇所には注目して、しっかりとループを抜けれるようになっているか確認するようにしましょう。
while文にtrueを入れて無限ループ
while文は条件が合っている間は繰り返されると書いてきました。
正確には、論理値のtrue
が入っている間、繰り返されます。
比較演算子を使って、「0 < 10
」などと比較すると、論理値が返ってきます。
その論理値がfalse
になると、ループの処理を抜けるといった形です。
そのため、while文に直接true
を指定することも可能です。
こうすると、条件は書いていませんが、ずっとtrue
のためループ処理が続きます。
while (true) {
console.log(`無限ループ!!`);
}
while文のループ処理を抜ける(break)
while文をループ条件とは別に、一定の条件に当てはまったときにループを抜けたいときには、break文を使います。
例えば、下記のように使うことができます。
let fruits = ['apple', 'orange', 'banana', 'peach', 'cherry'];
let i = 0;
while (i < fruits.length) {
let fruit = fruits[i];
console.log(fruit);
if (fruit === 'banana') {
break;
}
i++;
}
最初にfruits
変数に果物名を並べた配列を代入しました。
その次に変数i
を作って、0を代入しました。(カウント用の変数です)
そして、while文を使っています。
条件としては「i < fruits.length
」としています。
カウント変数が、fruits配列の要素数より少ない間、繰り返されます。(0 < 5
)
ループ処理の中では、最初に配列の要素を取得しています。
「fruits[i]
」で、要素番号で指定した配列の要素をひとつ取得できます。
要素番号のiは最初は0なので、apple
が取り出されます。
その次の行で、console.log
で取り出した要素を出力しています。
次のif文で、fruit変数をbanana
か比べています。
banana
だったときにbreak文を使うようにしました。
最後に変数i
をひとつ足して、ループ処理が終わります。
ループ処理を3行で、まとめると下記のような感じです。
・最初に配列要素を要素番号を使って取り出している
・配列に`banana`の要素があるとbreak文で抜ける
break文が使われているので、banana
の要素が出力された後はループ処理が終わります。
結果、プログラムを実行すると、下記のようになります。
apple
orange
banana
break文を使って、ループ処理の途中で、処理を抜けたことが確認できました。
while文でスキップする(continue)
while文で、処理をスキップしたいときにはcontinue文を使います。
continue文を使うと、ループの先頭に戻って処理を続けます。
条件を抜ける処理を意識しないとバグになりやすいので、気をつけましょう。
例えば、下記のように使います。
let fruits = ['apple', 'orange', 'banana', 'peach', 'cherry'];
let i = 0;
while (i < fruits.length) {
let fruit = fruits[i];
if (fruit === 'banana' || fruit === 'peach') {
i++;
continue;
}
console.log(fruit);
i++;
}
先ほどのプログラムを少し変えてます。
fruits
配列の要素数の間ループしているところは変わっていません。
ループ処理の中を変えています。
ループ処理の最初にfruit
変数に配列の要素をひとつ取り出しています。
次に、if文でfruit
変数が「banana
」または「peach
」のときに、下記の処理をしています。
・continue文でループの先頭に戻って処理する
ここで、変数i
のカウントアップを忘れてしまうと、ずっとfruit
要素が変わらないまま無限ループになってしまいます。
if文の条件判定が終わった後は、console.log
でfruit
変数の内容の出力をしています。
最後に変数i
のカウントアップをして、ループ処理が終了です。
プログラムを実行して、結果を確認すると、下記のようになりました。
apple
orange
cherry
fruit
変数が「banana
」または「peach
」のときには、continue文で処理をスキップして、先頭に戻っていました。
そのため、2つの要素は出力されずに、その他の要素だけ出力されたことが確認できました。
おわりに
今回はJavaScriptのwhile文について書きました。
記事の内容をまとめると、下記のようになります。
・条件が合っている(true)の間、ループ処理が実行される
・無限ループは抜ける条件にならずに、ずっとループが続くこと
・条件の他にも、break文を使うことで、好きなときにループを抜けれる
・continue文を使うことで、条件の先頭に戻って処理をできる(後続処理のスキップ)
while文を使ってきましたが、while文では条件しか書かないため、バグを作り出しやすいのかなと感じています。
通常のループをする場合は、for文を使うようにした方が良いかと思います。
また、配列の要素数分ループするときには、forEachが使えるので検討してみてください。
コメント