概要
ループは「条件が真の間ずっと繰り返す」しくみだが、実際のプログラムでは「この条件を満たした瞬間、もう続ける必要がない」という途中離脱や、「この反復だけ飛ばして次の反復に進みたい」という部分スキップが頻繁に発生する。これを実現するのが break と continue という 2 つの制御命令だ。
break はループそのものから抜ける命令で、見つけた瞬間に for/while/do-while のブロックを終了して次のコードに進む。「配列から目的の値を見つけたら探索を止める」「100 を超えた値が来たら集計を打ち切る」など、完了条件が途中で確定する ケースで使う。一方 continue は、その反復の残りをスキップして条件判定 (および for の場合は更新式) に飛び、次の反復を始める。「偶数だけ集計したいから奇数はスキップ」「空行は無視して次の行を読む」など、特定の反復だけスルー したいときに使う。
注意点が 2 つある。1 つ目は 入れ子ループでの挙動。break / continue はデフォルトで「最も内側のループ だけ」に作用する。外側のループまで抜けたい場合は break 2; のように数字で階層を指定する書き方があるが、これは可読性が落ちやすいのでフラグ変数で制御する方が無難なことも多い。2 つ目は 使い過ぎ問題。break や continue が大量に散らばったループは「結局このループはどんな条件で終わるのか」が読みにくくなる。条件を 1 箇所にまとめて書ける時はループ条件そのもので表現し、本当に途中離脱が必要な時だけ使う、というバランス感覚が大事になる。
学習目標
breakでループを途中で抜けられるcontinueで次の反復にスキップできる- 2 つの動きの違いを言える
ドリル
| no | 内容 |
|---|---|
| 01 | 1〜10 のループで 5 になったら break |
| 02 | 1〜10 のループで偶数を continue でスキップ |
| 03 | 複数の整数を読み、最初に 100 を超えた値で break |
📝 演習: ドリル 01 — 5 で break
問題
1 から 10 までの for ループで、$i が 5 になったら break でループを抜けてください。
ループの中では (break の前に) $i の値を 1 行ずつ出力します。
期待される出力:
1
2
3
4ヒント
for ($i = 1; $i <= 10; $i++)でループするif ($i === 5) { break; }を echo の前に 置く- そうすると
5を出力する前にループを抜けるので、1〜4 が出る
📝 演習: ドリル 02 — 偶数をスキップ
問題
1 から 10 までの for ループで、$i が 偶数 なら continue で出力をスキップし、奇数だけを 1 行ずつ出力してください。
期待される出力:
1
3
5
7
9ヒント
- 偶数判定は
$i % 2 === 0 if ($i % 2 === 0) { continue; }を echo の前に置く- 残った奇数だけ
echo $i . "\n";で出力
📝 演習: ドリル 03 — 最初に 100 を超えた値を見つける
問題
標準入力から整数を 1 行ずつ何度も読み、最初に 100 を超えた値 が出てきたら、その値を出力してループを抜けてください。 入力の終端 (EOF) まで 100 を超える値が無かった場合は何も出力しなくてよい (今回のテストでは必ず 100 を超える値が含まれる)。
入力例:
12
50
99
123
77
期待される出力:
123ヒント
while (($line = fgets(STDIN)) !== false)で EOF まで読める- 各行を
$n = (int) trim($line);で数値化 if ($n > 100) { echo $n . "\n"; break; }で出力 + 抜ける