Python | Break を使う前と後のコード比較(読みやすさ改善)

Python
スポンサーリンク

最初は「なくても書けるけど、あると気持ちいい」くらいの違いに見えます。でも break は“意図の早出し”ができるので、コードがぐっと読みやすくなります。ここでは初心者向けに、書き方の前後比較で効果をかみ砕いて説明します。break はループを即座に終わらせ、次の処理へ進める命令です。


例題1:検索の打ち切り(最初に見つかった一致だけ欲しい)

Before(break なし:最後まで回る)

nums = [3, 7, 10, 11, 14]
found = None

for n in nums:
    if n % 2 == 0:
        found = n
        # 見つかってもループは続く(不要)
# ここまで来てようやく found を使う
print(found)  # 14(最後の偶数が残る)
Python
  • 読みづらい理由: 「最初の偶数が欲しいのか、全部チェックしたいのか」がコードから読み取りにくい。見つかった後もループが続くため、無駄な繰り返しが発生する。

After(break あり:意図を即宣言)

nums = [3, 7, 10, 11, 14]
found = None

for n in nums:
    if n % 2 == 0:
        found = n
        break  # 見つかったら即終了
print(found)  # 10(最初の偶数)
Python
  • 読みやすさの改善: 「最初に見つかったら終える」という意図が break で即わかる。処理量も減り、変数 found の値が「最初の一致」であることが保証される。

補足: 見つからなかった場合の扱いを明示したいときは for-else を使うと意図がさらに明確になります(break されなかったときだけ else 実行)。

for n in nums:
    if 条件:
        # 見つかった
        break
else:
    # ここは「1度も break されなかった」
    print("見つかりませんでした")
Python

例題2:入力ループの早期終了(ユーザが終わりと言ったら止めたい)

Before(break なし:フラグや複雑な条件が必要)

finished = False
while not finished:
    cmd = input("コマンド: ")
    if cmd == "exit":
        finished = True  # ここで終了フラグを切り替え
        # まだ周回の残りがあると複雑化しやすい
        continue
    # コマンド処理...
Python
  • 読みづらい理由: フラグの切替や continue が絡み、制御の流れが散らばる。終了意図が「条件とフラグ操作」に埋もれて見えづらい。

After(break あり:終了条件を一点に集約)

while True:
    cmd = input("コマンド: ")
    if cmd == "exit":
        break  # ここで明確にループを終える
    # コマンド処理...
Python
  • 読みやすさの改善: 終了条件がその場で完結。「終わりなら終わる」という自然な制御になり、意図が一目で伝わる。

例題3:ネストした探索(内側で見つかったら外側も止めたい)

Before(break なし:フラグで後から判断)

grid = [[1, 3], [5, 8], [10, 12]]
found = None
done = False

for row in grid:
    for x in row:
        if x == 8:
            found = x
            done = True  # フラグだけ立てて内側を終える
            break        # 内側は終わる
    if done:
        # 外側の終了はここで判断(読み取りコストが高い)
        break

print(found)  # 8
Python
  • 読みづらい理由: 「どのループを終えるか」をフラグに頼るため、意図が二段構えで伝わる。追跡に労力がかかる。

After(break あり:意図を直列に表現)

grid = [[1, 3], [5, 8], [10, 12]]
found = None

for row in grid:
    for x in row:
        if x == 8:
            found = x
            break  # 内側ループを終了
    if found is not None:
        break      # 外側ループも終了

print(found)  # 8
Python
  • 読みやすさの改善: 「内側を終える→見つかっていれば外側も終える」という流れがそのままコードに反映される。読者が頭の中で状態を追いかける負担が減る。

例題4:for-else で「見つからなかった」を自然に書く

Before(break なし:後続の if で消耗)

target = 7
nums = [2, 4, 6]

found = False
for n in nums:
    if n == target:
        found = True
        # 見つけてもループは続く

if not found:
    print("見つかりませんでした")
Python

After(break+for-else:意図が構文に乗る)

target = 7
nums = [2, 4, 6]

for n in nums:
    if n == target:
        print("見つかりました")
        break
else:
    # 1回も break されなかったときだけ実行
    print("見つかりませんでした")
Python
  • 読みやすさの改善: 「見つからなかった場合」を構文で表現できるため、状態フラグの導入や後置判定が不要。検索系ロジックの定番パターンとして覚えると強い。

いつ break を入れると“読みやすい”か

  • 条件達成=ループ終了が自然な場面: 最初の一致が見つかったら打ち切り、上限に達したら停止、エラー検出で中断など。
  • 終了意図を早出ししたい場面: 「ここで終わり」をコードの同じ行で宣言できる。読者は先の行まで読み進めなくても、制御の終点がわかる。
  • 不要な反復を避けたい場面: 見つかった後の残りの要素は用がない。break で無駄を削り、処理時間と脳の負担を減らす。

小さな指針(初心者向けの合言葉)

  • “見つかったら終わり”は break。
  • “この回だけ飛ばす”は continue。
  • “結論が出たら関数ごと終わり”は return。

いまのあなたのコード、どこで「もう十分、ここで終えていい」が言えますか?そこに break を置くだけで、意図がクリアになり、読み手が楽になります。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました