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

JavaScript JavaScript
スポンサーリンク

continue を一言でいうと

continue は、ループの中で
「この周(イテレーション)の残りはスキップして、すぐ次の周に進む」
ためのキーワードです。

ループ自体をやめるわけではありません。
「この回だけ飛ばす」「この条件のときだけ処理を抜かす」——
そんな“選別”をしたいときに使います。

break が「ループを完全に終了」なのに対して、
continue は「今の一周だけ中断して、ループは続行」です。


一番シンプルな continue の動き

0〜9 をループしつつ「3 だけスキップ」する例

まずは for 文での基本例から。

for (let i = 0; i < 10; i++) {
  if (i === 3) {
    continue;
  }
  console.log(i);
}
JavaScript

このコードの出力はこうなります。

0
1
2
4
5
6
7
8
9

3 だけ出てきません。

流れを言葉で追うとこうです。

  • i = 0 → if に入らない → console.log(0)
  • i = 1 → if に入らない → console.log(1)
  • i = 2 → if に入らない → console.log(2)
  • i = 3 → if の中に入り continue 実行 → 残り(console.log(i))はスキップ → すぐ次の i = 4
  • i = 4 以降は普通に続く

ここで一番大事なのは、
continue が実行された瞬間、「その周の残りの処理」が全部飛ばされる
ということです。

ループ自体は止まりません。
「この周はもういいや、次!」という感じで進みます。


break と continue の違いを体感する

break は「ループ終了」、continue は「この周だけスキップ」

同じ条件で break を使うとどうなるか比べてみましょう。

console.log("=== continue の場合 ===");
for (let i = 0; i < 10; i++) {
  if (i === 3) {
    continue;
  }
  console.log(i);
}

console.log("=== break の場合 ===");
for (let i = 0; i < 10; i++) {
  if (i === 3) {
    break;
  }
  console.log(i);
}
JavaScript

出力はこうなります。

=== continue の場合 ===
0
1
2
4
5
6
7
8
9
=== break の場合 ===
0
1
2

continue のときは「3 だけ抜けて 9 まで続く」。
break のときは「3 に到達した瞬間、ループ自体が終了」。

ここが重要です。
「ループを続けたいけど、この条件のときだけ処理を飛ばしたい」なら continue、
「この条件になったら、もうループ自体を終わらせたい」なら break

と覚えておくと、使い分けがスッと入ってきます。


while ループでの continue

while でも「この周だけスキップ」の意味は同じ

while でも continue の意味は同じです。
「この周の残りをスキップして、次の条件チェックへ飛ぶ」です。

let i = 0;

while (i < 10) {
  i++;

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

  console.log(i);
}
JavaScript

出力はやはり 1, 2, 4, 5, 6, 7, 8, 9 になります。

ここで注意してほしいのは、
continue の前にカウンタ(i++)をちゃんと進めている ことです。

もしこう書いてしまうと、無限ループになります。

let i = 0;

while (i < 10) {
  if (i === 3) {
    continue; // i が増えないまま、ずっと 3 のまま…
  }

  console.log(i);
  i++;
}
JavaScript

i が 3 のときに continue で下の i++ がスキップされるので、
i が永遠に 3 のままになってしまいます。

ここが重要です。
while で continue を使うときは、「カウンタを進める処理」がスキップされない位置にあるかを必ず確認する
for 文はカウンタ更新が構文の一部なので安全ですが、while は自分で気をつける必要があります。


実用的な例1:配列から「特定の条件の要素だけスキップ」する

奇数だけを表示したい(偶数は continue で飛ばす)

continue が一番生きるのは、
「この条件のときは処理しないで飛ばしたい」というフィルタ的な場面です。

例えば、配列から奇数だけを表示したいとします。

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

for (let i = 0; i < numbers.length; i++) {
  const n = numbers[i];

  if (n % 2 === 0) {
    // 偶数なら、この周の残りをスキップ
    continue;
  }

  console.log(n); // ここに来るのは奇数だけ
}
JavaScript

出力は 1, 3, 5, 7, 9 です。

ここでの考え方はこうです。

「偶数のときは何もしない」
→ 「偶数のときは continue で残りを飛ばす」
→ 「残ったのは奇数だけなので、安心して処理できる」

if の中に「やらない処理」を書くのではなく、
「やらない条件のときに continue で早めに抜ける」 と、
ループの本体がスッキリします。


実用的な例2:不正なデータをスキップして処理を続ける

null や空文字など「扱いたくない値」を飛ばす

現実のコードでは、
配列の中に「null」「空文字」「想定外の値」が混ざっていることがよくあります。

そういうときに、
「変な値はスキップして、まともな値だけ処理したい」
という場面で continue が役立ちます。

const names = ["Alice", "", "Bob", null, "Charlie"];

for (let i = 0; i < names.length; i++) {
  const name = names[i];

  if (!name) {
    // 空文字 "" や null, undefined などはスキップ
    continue;
  }

  console.log("こんにちは、" + name + " さん");
}
JavaScript

出力はこうなります。

こんにちは、Alice さん
こんにちは、Bob さん
こんにちは、Charlie さん

空文字と null は飛ばされているのが分かります。

ここが重要です。
「この条件のときは何もしない」というロジックを、
if の中にベタベタ書くのではなく、
「その条件なら continue で早めに抜ける」と考えると、
ループの本体が「やりたいことだけ」に集中できるようになります。


実用的な例3:ネストしたループでの continue(少しだけ応用)

二重ループで「内側の処理だけスキップ」する

二重ループでも continue は使えます。
まずはラベルなしのシンプルなパターン。

for (let i = 1; i <= 3; i++) {
  for (let j = 1; j <= 3; j++) {
    if (j === 2) {
      continue; // 内側のループの「この周」だけスキップ
    }
    console.log(`i=${i}, j=${j}`);
  }
}
JavaScript

出力はこうなります。

i=1, j=1
i=1, j=3
i=2, j=1
i=2, j=3
i=3, j=1
i=3, j=3

j === 2 のときだけ、内側の処理が飛ばされています。
外側の i のループは普通に回り続けます。

ラベル付き continue(知識として)

JavaScript には「ラベル付き continue」もあります。

outer: for (let i = 1; i <= 3; i++) {
  for (let j = 1; j <= 3; j++) {
    if (j === 2) {
      continue outer; // 外側のループの次の周へ
    }
    console.log(`i=${i}, j=${j}`);
  }
}
JavaScript

これは少しトリッキーなので、
初心者のうちは「ラベルなし continue」だけ使えれば十分です。
「こういうこともできるんだ」くらいの認識で OK。


初心者が continue を使うときに気をつけたいこと

使いすぎると「流れが追いにくくなる」

continue は便利ですが、
あちこちに散らばると「どこでスキップされるのか」が分かりにくくなります。

例えば、こういうコードは読みづらくなりがちです。

for (let i = 0; i < items.length; i++) {
  if (!items[i]) continue;
  if (items[i].disabled) continue;
  if (items[i].hidden) continue;

  // ここに来るまでに 3 回 continue の可能性がある
  process(items[i]);
}
JavaScript

悪くはないですが、
条件が増えてくると「何が OK 条件なのか」が見えにくくなります。

場合によっては、
「やりたい条件」をまとめて書いた方が読みやすいこともあります。

for (let i = 0; i < items.length; i++) {
  const item = items[i];

  const isUsable =
    item &&
    !item.disabled &&
    !item.hidden;

  if (!isUsable) {
    continue;
  }

  process(item);
}
JavaScript

ここが重要です。
continue 自体は悪者ではないけれど、
「条件が増えすぎて読みづらくなっていないか?」を常に意識する。
“早めに抜ける” ことでコードがスッキリするなら使う、
逆に分かりにくくなるなら if でまとめる——
このバランス感覚が大事です。

while での無限ループに特に注意

さっきも触れましたが、
while で continue を使うときは、
「ループを進める処理(カウンタ更新など)がスキップされないか」を必ず確認してください。

for は構文の中に「更新式」があるので比較的安全ですが、
while は自分で書く必要があります。

「continue の前にカウンタを進める」
「continue の後にしかカウンタがない、は危険」

この感覚を持っておくと、無限ループをかなり避けられます。


まとめ:continue をどう“味方”にするか

continue は、
「この周の残りをスキップして、次の周に進む」ためのキーワード。

break はループ自体を終わらせるのに対し、
continue はループを続けながら「一部だけ飛ばす」。

よくある使いどころは、
「特定の条件の要素だけスキップしたい」
「不正なデータは飛ばして、まともなものだけ処理したい」
といった“フィルタ”的な場面。

while で使うときは、
カウンタ更新がスキップされて無限ループにならないように注意する。

そして何より、
「この条件のときは何もしない」を、
if の中にベタベタ書くのではなく、
“早めに continue で抜けて、残った本体をシンプルにする”

という発想で使うと、コードが一段読みやすくなります。

もし今書いているループで、
「この条件のときは処理したくないんだよな…」と感じたら、
一度 continue を思い出してみてください。
そのループ、本当はもっとスッキリ書けるかもしれません。

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