初心者が迷いやすい3兄弟「continue・return・break」。まずは違いをひと目で比較し、そのあとで短い例題で体感しましょう。
早見表
| キーワード | 範囲(どこまで止まる) | 何が起きる | 主な用途 | 読みやすさの印象 | 注意点 |
|---|---|---|---|---|---|
| break | 今いる「ループ」だけ | ループを直ちに終了 | 探索の早期終了・打ち切り | 分かりやすい | ネスト外には効かない |
| continue | 今いる「ループ」だけ | 今回の周回をスキップして次へ | 不要ケースのスキップ | 条件が多いと読みにくくなる | 必要な更新がスキップされてないか注意 |
| return | 今いる「関数」全体 | 関数を終了し値を返す | 成功/失敗の即時返却・早期退出 | 意図が明確で読みやすい | スクリプト直書きだと使えない(関数化が必要) |
指針のひとこと:「ループを終わるなら break」「今回だけ飛ばすなら continue」「処理全体を終わるなら return」。
使い分けの感覚
- break:
- 意図:「もう目的は見つかった。残りを回しても意味がない」
- 典型: 検索・探索・バリデーションの打ち切り
- continue:
- 意図:「この要素は対象外。次の要素へ」
- 典型: フィルタリング・スキップ処理
- return:
- 意図:「結論が出た。関数ごとおしまい」
- 典型: 成否判定・最初の一致の返却・エラー時の即終了
例題で比較
例1: リストから最初の偶数を見つけたい(break と return)
# break:ループだけ終わる(スクリプト直書き向き)
numbers = [3, 7, 11, 18, 21]
for n in numbers:
if n % 2 == 0:
print("最初の偶数:", n)
break
else:
print("偶数は見つかりませんでした")
Python# return:関数ごと終わる(再利用・テストしやすい)
def find_first_even(numbers):
for n in numbers:
if n % 2 == 0:
return n
return None
result = find_first_even([3, 7, 11, 18, 21])
print("最初の偶数:", result if result is not None else "なし")
Python- 違いの要点:
- break: ループ終了後に続きの処理が可能。
- return: 関数を抜けるので、後続は関数の外で行う。
例2: 無効データを飛ばしながら集計したい(continue)
items = [10, None, 25, "x", 15]
total = 0
for x in items:
if not isinstance(x, int):
continue # 数値以外はスキップ
total += x
print("合計:", total) # 10 + 25 + 15 = 50
Python- ポイント: 不要ケースを早めに除外して、主処理(加算)をスッキリ保つ。
例3: ネストしたループでの使い分け(break の範囲に注意)
grid = [[1, 2, 3], [4, 5, 6]]
for row in grid:
for x in row:
if x % 2 == 0:
print("最初の偶数:", x)
break # 内側ループだけ終了
# 外側は続く
Python- 気づき: 外側ループまで止めたいなら関数化して return を使う方が明確。
def find_first_even_in_grid(grid):
for row in grid:
for x in row:
if x % 2 == 0:
return x
return None
Python選び方の指針
- 目的が「打ち切り」なら break、目的が「結論の返却」なら return。
- 単純なスキップは continue、複雑な条件分岐は if-elif-else で整理して continue を減らす。
- ネストが深い場合は関数に切り出して return を使うと、意図が伝わりやすくなる。
よくある落とし穴と対策
- continue のせいで更新漏れ
- 例: ループ末尾のカウンタ加算やログ出力が continue で飛ぶ。
- 対策: 重要な更新は continue の前に置く、またはロジックを関数に分ける。
- break の範囲誤解
- 例: 内側だけしか止まらないのに、外側まで止まると思い込む。
- 対策: 外側も止めたいなら関数化して return、またはフラグで外側条件に組み込む。
- return の使いすぎで出口が多すぎる
- 例: 関数の途中に return が散らばって読みにくい。
- 対策: 早期 return は2〜3箇所までに抑え、共通の後処理が必要ならまとめる。
ミニ練習問題(答えは自分で動かして確認)
- 練習1: リストから最初の3の倍数を見つけるコードを、break と return の両方で書く。
- 練習2: 文字列のリストから、空文字をスキップしながら長さの合計を求める(continue)。
- 練習3: 二重ループで行列から最初の負の数を探し、見つかったら処理全体を終了(関数+return)。
迷ったら「何をスキップ/終了したいのか」を言葉にしてみてください。言葉にできれば、continue・break・returnのどれを使うべきか自ずと決まります。
