プログラミング初心者がよくつまずくのが「ネストが深くなってしまう」問題です。
例えば、for の中に if があり、その中にさらに for があり…と繰り返すと、コードが読みにくくなります。
実務では「ネストを脱出する」ために フラグ や 関数化 をよく使います。これを図解と例題でかみ砕いて説明します。
1. フラグを使ったネスト脱出
問題例:二重ループで「見つかったらすぐ終了したい」
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
target = 5
found = False # ← フラグを用意
for row in matrix:
for num in row:
if num == target:
print("見つかった:", num)
found = True
break # 内側ループを抜ける
if found: # フラグをチェックして外側も抜ける
break
if not found:
print("見つからなかった")
Pythonテキスト図解
外側ループ
└─ 内側ループ
├─ 見つかった → found=True → break
└─ 外側ループで found を確認 → break
👉 ポイント:
foundという「見つかったかどうか」を記録する変数を使う。- 内側ループを抜けた後、外側ループでもフラグを見て抜ける。
- ネストが深くても「フラグで状態を持つ」ことで整理できる。
2. 関数化して早期 return で脱出
問題例:同じ「探索処理」を関数にまとめる
def search_matrix(matrix, target):
for row in matrix:
for num in row:
if num == target:
return f"見つかった: {num}" # 関数ごと終了
return "見つからなかった"
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(search_matrix(matrix, 5))
print(search_matrix(matrix, 10))
Pythonテキスト図解
search_matrix()
└─ 外側ループ
└─ 内側ループ
├─ 見つかった → return で関数終了
└─ 最後まで見つからず → return "見つからなかった"
👉 ポイント:
- 関数にまとめると「見つかったら return」で一気に抜けられる。
- フラグを使わなくても「関数終了」で処理を止められる。
- 実務では「複雑な処理は関数化して早期 return」がよく使われる。
3. フラグ vs 関数化の使い分け
| 方法 | メリット | デメリット | 実務での使いどころ |
|---|---|---|---|
| フラグ | 既存コードに簡単に追加できる | フラグ変数が増えると管理が面倒 | 小規模な処理、既存コードにちょっと追加 |
| 関数化 | ネストを浅くできる、早期終了が明快 | 関数分割の設計が必要 | 大規模処理、再利用したい処理 |
4. 初心者向けまとめ
- ネストが深いと読みにくい → 脱出テクが必要
- フラグ方式: 状態を記録して外側ループも抜ける
- 関数化方式: 関数にまとめて「見つかったら return」で一気に抜ける
- 実務では「関数化して早期 return」がよく使われるが、簡単な場面ではフラグも便利
👉 次のステップとして「例外(try/except)を使ってネストを脱出する」テクもあります。これは「エラーが起きたら即座に処理を止める」場面でよく使われます。


