基礎

JavaScriptのwhile文入門|条件付きループの書き方と無限ループの防止

JavaScriptの while 文は、指定した条件が true である間、処理を繰り返し実行するループ構文です。繰り返し回数が事前に決まっていない場合や、特定の条件が満たされるまで処理を続けたい場合に適しています。

この記事では、while 文の基本構文から、breakcontinue によるループ制御、無限ループの防止方法まで、実践的なコード例で解説します。

基本的な使い方

while 文は、ループの先頭で条件を評価し、true の場合にブロック内の処理を実行します。条件が false になるとループを終了します。

JavaScript
// 基本的なwhile文
let count = 1;
while (count <= 5) {
  console.log(count + '回目のループ');
  count++;
}
console.log('ループ終了。countの値:', count);
実行結果
1回目のループ
2回目のループ
3回目のループ
4回目のループ
5回目のループ
ループ終了。countの値: 6

上記の例では、count が1から始まり、5以下の間ループが実行されます。ループ内で count++ によりカウンターを増やしているため、5回繰り返した後に count が6になり、条件 count <= 5false となってループが終了します。

ここで重要なのは、ループ内で条件を変化させる処理(この例では count++)を忘れないことです。これがないと条件が永遠に true のままとなり、無限ループに陥ります。

break と continue

break はループを即座に終了し、continue は現在の繰り返しをスキップして次の繰り返しに進みます。

JavaScript
// break の例:特定の条件でループを中断
let num = 0;
while (num < 100) {
  num++;
  if (num * num > 50) {
    console.log(num + 'の二乗が50を超えました');
    break;
  }
}

// continue の例:偶数だけをスキップ
let i = 0;
while (i < 10) {
  i++;
  if (i % 2 === 0) {
    continue;  // 偶数はスキップ
  }
  console.log(i);
}
実行結果
8の二乗が50を超えました
1
3
5
7
9

break はデータの検索や、ユーザー入力の待機など「条件が見つかったら終了」というパターンでよく使います。continue は「特定の条件に該当するものだけスキップしたい」場合に便利です。

実践例:入力値の検証ループ

JavaScript
// ランダムな数値を生成して条件を満たすまで繰り返す
let attempts = 0;
let target = 7;
let result;

while (true) {
  result = Math.floor(Math.random() * 10) + 1;
  attempts++;
  console.log(attempts + '回目: ' + result);

  if (result === target) {
    break;
  }
}
console.log(target + 'が出るまで' + attempts + '回かかりました');

// 配列から条件に合う要素を探す
const data = [12, 45, 7, 23, 89, 3, 67];
let index = 0;

while (index < data.length) {
  if (data[index] > 50) {
    console.log('50を超える最初の値: ' + data[index] + ' (インデックス: ' + index + ')');
    break;
  }
  index++;
}
実行結果
1回目: 3
2回目: 9
3回目: 7
7が出るまで3回かかりました
50を超える最初の値: 89 (インデックス: 4)

while (true) は意図的な無限ループで、break で抜けることを前提としています。条件が複雑でループの途中で判定したい場合に有用ですが、break に到達しないパスがないか慎重に確認する必要があります。

while と for の使い分け

繰り返し回数が決まっている場合は for 文、条件が満たされるまで繰り返す場合は while 文を使うのが一般的です。for 文は初期化・条件・更新が1行にまとまるため、カウンター変数のループには for の方が読みやすくなります。

無限ループに注意

while 文で最もよくあるバグは無限ループです。条件を変化させる処理を忘れたり、continue でカウンター更新をスキップしたりすると発生します。開発中は安全策として let safety = 0; のようなカウンターを用意し、if (safety++ > 10000) break; を入れておくと、万が一の無限ループを防止できます。

まとめ

  • while 文は条件が true の間、繰り返し処理を実行する
  • ループ内で条件を変化させる処理を忘れると無限ループになる
  • break でループを即座に終了、continue で現在の繰り返しをスキップできる
  • while (true)break の組み合わせで複雑な終了条件に対応できる
  • 繰り返し回数が決まっている場合は for 文の方が適切