「触ると壊れるコード」第1回:1行修正したら壊れた話
「ちょっと変えただけなのに…」
実務あるある
👉 デフォルト値を調整した
👉 ちょっとした改善のつもり
結果
👉 別の処理が壊れる
元のコード
def fetch_data(timeout=3):
print(f"timeout={timeout}")
def fetch_fast():
fetch_data(1) # 速さ優先
def fetch_safe():
fetch_data() # 安定重視(デフォルト)👉 普通に動く
👉 役割も分かれてる
よくある変更
👉 「デフォルト遅いな…」と思って
def fetch_data(timeout=1): # ← ここだけ変更
print(f"timeout={timeout}")何が起きるか
👉 fetch_fast → 変わらない
👉 fetch_safe → 速くなる
「それでいいのでは?」
ここがポイント
👉 fetch_safeは「安定重視」だった
結果
👉 タイムアウトが短すぎて失敗が増える
👉 安全側の処理が壊れる
🔥 ここが本質
👉 書いた人はこう思ってる
「デフォルトをちょっと変えただけ」
👉 でも実際は
暗黙の前提を壊している
今日のポイント
👉 デフォルト値 = 見えない仕様
📚 もう一歩深く理解したい人へ
ここまで読んで
👉 「これ、実務でどう防ぐの?」
と思った人は、このあたりを一度読んでおくと理解が一気に進みます。
Effective Python 第3版
👉 デフォルト引数や設計の落とし穴が具体例で学べます
Clean Architecture 達人に学ぶソフトウェアの構造と設計
👉 依存と責任の分け方が理解できます
※上記リンクはアマゾンアソシエイトを利用しています
この問題、実務だとこうなる
タイムアウト値変更で通信不安定
デフォルト設定変更で既存機能が壊れる
オプション未指定時の挙動が変わる
👉 全部同じ構造
次回予告
👉 「グローバル変数を触ったら壊れた話」
今回よりもっと影響範囲が広くなります
ひとこと
👉 このデフォルト値、変えますか?
いいなと思ったら応援しよう!
応援お願いします!
より良い情報を提供できるよう活動費に使わせていただきます。