【Javascript】 for文 (ループ) – プログラミング入門
forループは、同じプログラムを繰り返し行うためのものです。if
に並ぶ超重要な要素なのでしっかり理解していきましょう。
書き方
基本的なループの書き方は次のようなプログラムです。
for (let i = 0; i < 5; i++) { console.log(i); }
0 1 2 3 4
他にもループの書き方は存在します。forを利用した基本形以外の書き方は言語によって異なるため、それぞれの言語で確認する必要があります。
他の言語でも同じような構造ですが、軽い方言程度の差はあります。
構造
for文は、大きく分けて3つのパーツに別れます

if文と構造が似ています。
- forやifなどの種類を書き
- カッコの中に設定を書き
- 波括弧の中に実行する内容を書く
処理したい内容がプログラム的に1行であれば、波括弧の記述は省略できます。
for (let i = 0; i < 3; i++) console.log(i);
のように書けます。
という流れです。ここで, 括弧の中の設定を詳しく見ていきましょう。

このように、設定は3つパーツに分かれています。
- 最初に、ループ開始前に1度だけ実行するものを書きます。通常はループの回数をカウントするための変数を作るだけです。
- 次に、ループを続ける条件を書きます。ここは、初回のループも処理が実行されます。ifの括弧の中身と同じように書くと良いです。
- 最後に、毎ループ後に実行する内容を書きます。通常はループの回数を増やすコードを書きます。しばしば
i++
やj++
が書かれます。
そして、それらをセミコロンで区切ります。
ループのカウントに使用する変数名は、しばしばi
が使われます。昔のFORTRANという言語で、変数の1文字目がi~nは整数を表すという決まりがありました。ループのカウントは整数なので、その最初のi
の1文字が使われたようです。その慣習ですね。
具体的な処理の流れ
ここで、様々な使い方を見てみましょう。
let sum = 0; let n = 3; for (let i = 1; i <= n; i++) { sum += i; } console.log(sum);
6
この流れは、
1ループ目
i
に0
が代入される。初回のみ実行i <= n
を判定。n
は3
が代入されているので、i <= 3
と同等- 条件を満たしているので
sum += i
を実行。i
は1
なので、sum += 1
この時点でsum
は1
i++
を実行i
が2
になる
2ループ目
i <= n
を判定- 条件を満たしているので
sum += i
を実行、i
は2
なのでsum += 2
この時点でsum
は3
i++
を実行i
が3
になる
3ループ目
i <= n
を判定- 条件を満たしているので
sum += i
を実行、i
は3
なのでsum += 3
この時点でsum
は6
i++
を実行i
が4
になる
4ループ目
i <= n
を判定i
は4
、n
は3
なので、この式の結果はfalse
になる- ループ終了
となります。文章で表すと長いですが、1回目のみループ前の初期化処理をしたら、あとはループ続行の判定、中身の処理、ループ後の後処理を繰り返すだけです。
次に、別の使い方を見てみます。
let n = 5; for (let i = n; i >= 0; i--) { console.log(i); if (i % 2 == 0) { console.log("2で割り切れる"); } else { console.log("2で割り切れない"); } }
5 2で割り切れない 4 2で割り切れる 3 2で割り切れない 2 2で割り切れる 1 2で割り切れない 0 2で割り切れる
これは、先程とは逆方向にループしています。i
が5
から始まって、ループ毎に1つづ減っていき、0
を下回ったら終了するというものです。
多重ループ
forを重ねることで、ループの中で更にループさせることが可能です。
for (let i = 0; i < 3; i++) { console.log("外" + i); for (let j = 0; j < 2; j++) { console.log("内" + j); } }
外0 内0 内1 外2 内0 内1 外3 内0 内1
このように
- 外1回目
- 内1回目
- 内2回目
- 外2回目
- 内1回目
- 内2回目
- 外3回目
- 内1回目
- 内2回目
とループします。
Javascriptでは、足し算で文字を連結できます。"外" + i
は、外
という文字列と、i
の値を文字化したものが連結されます。足し算以外の四則演算はできません。
構造を図で表すと

となります。if文もこのように重ねることができ、頻繁に行う書き方なため、ifやforを重ねるという行為には慣れておきましょう。
ループの中断
少し発展的な内容です。
for文では、条件式以外でも中断することができます。
let x = 0; for (let i = 0; i < 100; i++) { x++; console.log(x); if (x == 2) { break; } }
1 2
break
というものが登場しました。break
は、そのループを中断する命令です. 今回の場合、ループごとにx
が増えていきますが、x
が2
の状態で処理を行うとbreak
が実行され、その瞬間ループが終了します。
その瞬間に中断されるので、中断後のループ内のコードは実行されません。
let x = 0; for (let i = 0; i < 100; i++) { console.log(i + "回目-1"); x++; if (x == 2) { break; } console.log(i + "回目-2"); } console.log(x);
0回目-1 0回目-2 1回目-1 2
1回目-2
の出力がないことがわかりますね。break
が実行されると、そのループから脱出します。
多重ループの場合のbreak
多重ループの場合もみていきましょう。
let x = 0; for (let i = 0; i < 3; i++) { console.log("外 " + i + "回目"); for (let j = 0; j < 100; j++) { x++; if (x >= 2) { break; } } }
外 0回目 外 1回目 外 2回目
内側のループでbreak
していますが、外側のループは3回実行されています。break
で中断しても外のループには影響がないことがわかります。外側のループを中断したい場合は、外側でbreak
しましょう。
let x = 0; let didBreak = false; for (let i = 0; i < 3; i++) { console.log("外 " + i + "回目"); for (let j = 0; j < 100; j++) { x++; if (x >= 2) { // breakされたら, 外でもbreakするためにフラグを設定する didBreak = true; break; } } // 内側でbreakされたなら外でもbreakする if (didBreak) { break; } }
外 0回目
まとめ
基本的なループを紹介しました
for
の構造は、for (初回だけ実行; ループ続行条件; 毎ループ後の処理) { 実行内容 }
という構造です。ループ続行条件は、初回も判定されることに注意してください。
