ループ
JavaScriptでは、繰り返し処理を行うための構文がいくつか用意されています。
for
文はループの代表的な構文で、主にカウンター付きループができます。
また、ほかにも以下の構文があります。
-
while
: 条件を満たしている間ループ、無限ループ -
forof
: イテレーター(配列)を使ったループ
ここからは各構文の詳細を解説していきます。
for
文
for
文は主に以下のケースで使われます。
- 今何回目のループなのか知りたいとき
- 数値を一定間隔で増やしたり減らしたりしたいとき
構文はこちらです。
for (初期化式; 条件式; 変化式) {
// 処理
}
それぞれの式には役割があります。
- 初期化式: ループ全体が始まる前に一度だけ実行される
- 条件式: 次のループを始めていいのかチェックする
-
===
などを使って真偽値にするとわかりやすい
-
- 変化式: 各ループが始まる前に実行される
例
例えば、1
から10
を足した数=55
を出力するコードを書いてみます。
公式を使ってもいいのですが、ここでは順番に足す処理を書きます。
このとき、1
から10
を順番に処理するために、for
文が使えます。
それぞれの式や処理では以下のことをするようにします。
- 初期化式: 変数
index
を1
で初期化 - 条件式:
index
が10
以下(index <= 10
)ならループを続ける - 変化式:
index
をインクリメント(1増やす)
let sum = 0
for (let index = 1; index <= 10; index++) {
sum += index
}
console.log(sum) // 55
このコードは以下の手順で実行されます。
- 初期化式が実行され、変数
index
が1
で初期化される - ループに入り、
sum
にindex
の値=1
が足される - 条件式がチェックされ、
index
は10
以下なのでループは中断しない -
index
をインクリメントする=1
を足す -
index
が10
を超えるまで2~4を繰り返す -
sum
の値がコンソールに出力される
条件式の書き方のコツ
条件式の書き方には、ちょっとしたコツがあります。
for
文は、条件式を満たしているうちはループが継続されます。
そのため、最後のループでは条件式を満たす値がindex
に入っています。
条件式index <= 10
を最後に満たすのはindex == 10
のときなので、最後に処理が実行されるときindex
は10
です。
このとき最初は1
で最後が10
なので、1
から10
の和が計算されます。
while
while
を使うと、条件を満たしているうちはループする処理ができます。
前述のfor
文でも条件式を使えば実装できますが、そのような処理の場合while
のほうが見た目がすっきりしやすいです。
構文はこちらです。
while (条件式) {
// 処理
}
while
は以下の用途に使えます。
- 条件を使ったループ
- 無限ループ
無限ループ
無限ループを実装するのは非常に簡単です。
while
文の条件式にtrue
を入れ、あとは適当に処理を書くだけです。
以下のコードは無限ループのサンプルです。
ブラウザで次のコードを実行した場合、最悪ブラウザを強制終了することになります。
実行は自己責任でお願いします。
while(true) {
console.log('無限ループ')
}
// 無限に「無限ループ」が出力され続ける
なお、無限ループといえば悪なイメージがあるかもしれませんが、使うときはたまにあります。
条件を使ったループ
もちろん、条件式にちゃんとした条件を入れることもできます。
ここではフィボナッチ数列を生成するコード実装してみます。
フィボナッチ数列は前の2つの数字を足していく数列です。
この数列は無限に続くので、今回は1000
以上の数字が出た時点でループを終了します。
以下は簡単に実装したものです。
const result = [1, 3] // 初期値
while (result.at(-1) < 1000) {
result.push(result.at(-1) + result.at(-2))
}
result // [1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, 521, 843, 1364]
at
メソッドとは
配列のat
メソッドは、インデックスを使って配列の要素を取得するものです。
result[index]
と大体同じですが、at
は負の数を入れることで最後から数えた要素を取り出せます。
このwhile
ループの中では、result
の最後から2
番目と1
番目の要素を足し、配列に追加しています。
そして配列の最後の要素が1000
を超えた時点でループは終了します。
while(true)
とbreak
を使って実装することもできます。
const result = [1, 3] // 初期値
while (true) {
if(result.at(-1) > 1000) break
last.push(result.at(-1) + result.at(-2))
}
result // [1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, 521, 843, 1364]
このコードでは、result.at(-1)
が1000
を超えていたらbreak
でループを終了しています。
それ以外は上と大体同じです。