5.

continue文の使い方|ループをスキップして次の反復へ・breakとの違い

編集
この記事の要点
  • continue 文は現在の反復だけを途中で打ち切り、次の反復へジャンプする制御文
  • ループ自体は終了しない。ループを抜けるのは break
  • Python / Java / JavaScript / C / Go など主要言語で共通の名前 continue
  • ネストループでは最も内側のループに作用する。Java / JS はラベル付き continue label; で外側を指定可
  • Python の for-elsebreak したかどうかで else が動くかが変わる。continue は影響しない

continue とは

continue 文は、繰り返し処理の中で「この回の残りはスキップして、次の反復に進む」ための制御構文です。ループそのものは終わらないため、特定の条件のときだけ処理を飛ばしたいケースで多用されます。

動作
continue今回の反復の残りをスキップし、次の反復に進む
breakループ自体を終了し、ループの直後に進む
return関数自体から抜ける(ループも当然抜ける)

Python の例

# 偶数だけ表示(奇数はスキップ)
for n in range(1, 11):
    if n % 2 == 1:
        continue          # この回の残りをスキップ
    print(n)
# => 2 4 6 8 10

# while でも同じ
n = 0
while n < 10:
    n += 1
    if n % 3 == 0:
        continue
    print(n)              # 3 の倍数は出ない

Java / JavaScript の例

// Java: 空白行を読み飛ばす
for (String line : lines) {
    if (line.isBlank()) continue;
    process(line);
}
// JavaScript: null を除いて合計
let sum = 0;
for (const v of values) {
  if (v == null) continue;
  sum += v;
}

ネストループとラベル

continue最も内側のループに作用します。「外側のループを continue したい」場合は、Java / JavaScript ではラベル付き continue が使えます。Python にはラベルがないため、フラグ変数や関数化で代用します。

outer: for (let i = 0; i < 5; i++) {
  for (let j = 0; j < 5; j++) {
    if (j === 2) continue outer;   // 外側ループの次回反復へ
    console.log(i, j);
  }
}
# Python: 関数化で「外側 continue」を実現
def process_row(row):
    for cell in row:
        if cell is None:
            return         # 行ごとスキップ
        handle(cell)

for row in matrix:
    process_row(row)

break との違い

for n in [1, 2, 3, 4, 5]:
    if n == 3: continue
    print(n)
# => 1 2 4 5  (3 だけ飛ばす)

for n in [1, 2, 3, 4, 5]:
    if n == 3: break
    print(n)
# => 1 2     (3 で打ち切り)

for-else との関係 (Python)

Python の for-elsebreak したかどうかでのみ else が動くか決まります。continue しても else は実行されます。

for n in range(5):
    if n == 2:
        continue          # else に影響しない
    print(n)
else:
    print('完走')         # 必ず実行される

for n in range(5):
    if n == 2:
        break             # ここで打ち切ると else は出ない
    print(n)
else:
    print('完走')         # 出ない

使いどころと書き換え

用途continue 版書き換え
不要要素のスキップif skip: continue でガードfilter / 内包表記
ネスト深くしたくない早期 continue で平坦化。可読性が上がるelse でネストする版
例外条件の除外if v is None: continue事前にフィルタした集合を走査

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 条件分岐 (if文)
  2. 繰り返し処理(while文)
  3. 繰り返し処理
  4. 繰り返しの中断 (break)
  5. 繰り返しのスキップ (continue)

最近更新/作成されたページ