JavaScript | 基礎構文:ループ – while 文

JavaScript JavaScript
スポンサーリンク

while 文を一言でいうと

while 文は、
「ある条件が true のあいだ、ずっと同じ処理を繰り返す仕組み」 です。

for 文は「何回回すか」を自分で設計するイメージでしたが、
while 文は「この条件が続くかぎり回す」というイメージに近いです。

ここが重要です。
while 文は、「回数が決まっていない/条件が続くかぎり繰り返したい」 という場面で力を発揮します。
ただし、条件がいつか false にならないと、延々と回り続ける(無限ループ)ので、その点はとくに意識が必要です。


while 文の基本構文と流れ

基本の形

一番シンプルな形はこうです。

while (条件) {
  // 条件が true のあいだ、ここが繰り返し実行される
}
JavaScript

流れは、次のようになります。

  1. まず (条件) を評価する
  2. 条件が true なら、波かっこの中の処理を実行
  3. 処理が終わったら、また条件をチェック
  4. また true なら、もう一度中身を実行
  5. これを、条件が false になるまで続ける

条件が最初から false なら、中身は一度も実行されません。

ここが重要です。
while 文のポイントは、「処理の前に、毎回かならず条件チェックがある」 ということです。
「まだ続けてもいい?」と毎回聞きながら、OK のあいだだけ回るイメージを持ってください。


最初の例:1 から 5 まで数える while 文

コードと実行の流れ

まずは、for 文でやったのと同じ「1〜5 を表示する」を while で書いてみます。

let i = 1;           // 初期化

while (i <= 5) {     // 条件
  console.log(i);    // 本体
  i++;               // 更新
}
JavaScript

実行すると、

1
2
3
4
5

と表示されます。

流れをコマ送りで追うと、こうなります。

1 回目

  1. i は 1(事前に代入してある)
  2. i <= 5 → 1 <= 5 は true
  3. console.log(1) を実行
  4. i++ で i は 2

2 回目

  1. i <= 5 → 2 <= 5 は true
  2. console.log(2)
  3. i++ で 3


i が 5 のときも同様に実行され、最後に i が 6 になったところで、

i <= 5 → 6 <= 5 は false になり、そこでループ終了です。

ここが重要です。
while 文では、「初期化」「条件」「更新」がバラバラに書かれます。
for 文の丸かっこの中にまとめていた 3 つを、自分で順番を意識しながら配置する必要があります。
この 3 つのどれかを忘れると、無限ループや意図しない動作の原因になります。


while と for の違い・使い分けのイメージ

for 文と while 文の書き比べ

同じ処理を for で書くとこうなります。

for (let i = 1; i <= 5; i++) {
  console.log(i);
}
JavaScript

while 版と見比べると、for は

  • 初期化(let i = 1
  • 条件(i <= 5
  • 更新(i++

が 1 行にまとまっています。

while は、同じことをもう少しバラして書いているイメージです。

let i = 1;

while (i <= 5) {
  console.log(i);
  i++;
}
JavaScript

動きはほぼ同じです。

どっちを使えばいいのか

ざっくりしたイメージとしては、

  • 「カウンターを使って、回数や範囲がはっきりしている繰り返し」
    → for 文が向いている場面が多い
  • 「いつ終わるかは条件次第(例:ユーザーが ‘q’ を入力するまで)」
    → while 文のほうが自然に書けることが多い

という感じです。

ここが重要です。
for と while は「どちらが良い/悪い」ではなく、
「回数を基準に考えるか」「条件が続くかぎり、という視点で考えるか」 の違いです。
初心者のうちは、まずは for で慣れてから、「回数が決まっていない繰り返し」に while を使ってみると理解しやすくなります。


while 文の実用的な例

例1:条件を満たすまで繰り返すカウンター

「合計が 100 を超えるまで、1 ずつ足し続ける」例です。

let sum = 0;
let n = 1;

while (sum <= 100) {
  sum += n;
  n++;
}

console.log("合計:", sum);
console.log("n:", n);
JavaScript

ここでは、「何回足すか」は最初から決まっていません。
sum <= 100 が false になるまで続けたいだけです。
こういうときは、「100 回回す for」ではなく、「条件が false になるまで回す while」の方が自然です。

例2:配列を while で回す(インデックス方式)

配列も while で回せます。

const fruits = ["apple", "banana", "orange"];
let i = 0;

while (i < fruits.length) {
  console.log(fruits[i]);
  i++;
}
JavaScript

これは for で書く版と同じ動きです。

for (let i = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}
JavaScript

配列の場合は for のほうがスッキリですが、
while でも「条件が true のあいだ」という考え方は同じだと確認するのに良い練習になります。


while 文で必ず気をつけるべきこと:無限ループ

よくあるミス:更新を忘れる

while 文で一番怖いのは、条件を false にする更新を忘れてしまうことです。

例えば、次のコードは危険です(実行しないでください)。

let i = 0;

while (i < 5) {
  console.log(i);
  // i++ を書き忘れた!
}
JavaScript

i が 0 のまま変わらないので、
i < 5 は永遠に true のままです。
結果として、console.log(i) が止まらなくなります。

条件式そのものが変化しない

少し違うパターンですが、
条件に使っている値自体が変化しないこともあります。

let keepGoing = true;

while (keepGoing) {
  console.log("ずっと続きます");
  // keepGoing を false にするタイミングがない
}
JavaScript

この場合も keepGoing は true のままなので、終わりません。

ここが重要です。
while 文を書くときは、「この条件が false になるのはいつか?」を先に自分に説明できること が大切です。
説明できない while は、たいてい無限ループの危険をはらんでいます。
必ず、「どこかで変数を変えて、条件が反転するポイント」をコードの中に作ってください。


break / continue と while の組み合わせ

break で while を途中で終わらせる

break を使えば、条件とは別の理由でループを中断できます。

let i = 0;

while (true) {
  console.log(i);
  i++;

  if (i > 5) {
    break;
  }
}
JavaScript

ここでは、条件を while (true) にして「とりあえず無限ループ」とし、
中で if (i > 5) break; として、
「i が 5 を超えたら終わり」というルールを自分で書いています。

結果として、0〜5 まで表示したところで while を抜けます。

continue で「今回だけ」スキップする

continue を使えば、特定の条件のときに「残り処理を飛ばして次の周回に進む」ことができます。

let i = 0;

while (i < 5) {
  i++;

  if (i === 3) {
    continue;
  }

  console.log(i);
}
JavaScript

このコードは 1, 2, 4, 5 を表示し、3 のときだけ console.log をスキップします。

ここが重要です。
while に break / continue を組み合わせると、
「条件が true のあいだ」という大枠の中で、「いつ終わるか」「どこを飛ばすか」を細かく制御できる ようになります。
ただし、制御が複雑になりすぎたら、関数を分割したり、for 文など別の書き方も検討してください。


初心者として while 文で本当に押さえてほしいこと

while 文は、「条件が true のあいだ繰り返す」構文です。
処理の前に毎回条件チェックがあり、false になった瞬間にループが止まります。

for 文との大きな違いは、「初期化」「条件」「更新」がバラバラに書かれることです。
これにより柔軟になりますが、そのぶん「更新を書き忘れて無限ループ」を起こしやすくもなります。

「この条件が false になるのはどこか?」を自分で説明できてから while を書くこと。
そのために、「条件に関わる変数を、ループの中でどう変化させるか」を必ずセットで設計することが大切です。

回数がはっきりしている繰り返し(1〜10 までなど)は for 文、
「いつ終わるかは条件次第」の繰り返しは while 文、というように、「繰り返したいイメージ」に合わせて選ぶ癖をつけてみてください。

ここが重要です。
while 文は、“いつまでやる?” を条件で表現するための道具です。
書く前に、
「何が変化して、その結果いつ条件が false になるのか?」
を紙に書いて整理してみてください。
その一手間だけで、無限ループの恐怖はかなり減りますし、while 文を“自分でコントロールできている” 感覚が持てるようになります。

練習としては、次のようなことをやってみると理解が深まります。

  1. while で 10 から 1 までカウントダウンするコードを書く(i-- を使う)。
  2. 配列を while で回すコードを書き、その後 for に書き換えて比較してみる。
  3. 「合計が 50 を超えるまで、1 から順に足し続ける」処理を while で書き、「どこで条件が false になるか」を自分の言葉で説明してみる。

手を動かしながら、「条件」「変化」「終了」の 3 つを意識できるようになると、while 文はもう難しいものではなくなります。

タイトルとURLをコピーしました