見出し画像

「触ると壊れるコード」第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 達人に学ぶソフトウェアの構造と設計
    👉 依存と責任の分け方が理解できます

※上記リンクはアマゾンアソシエイトを利用しています


この問題、実務だとこうなる

  • タイムアウト値変更で通信不安定

  • デフォルト設定変更で既存機能が壊れる

  • オプション未指定時の挙動が変わる

👉 全部同じ構造


次回予告

👉 「グローバル変数を触ったら壊れた話」

今回よりもっと影響範囲が広くなります


ひとこと

👉 このデフォルト値、変えますか?

いいなと思ったら応援しよう!

saku|技術メモ 応援お願いします! より良い情報を提供できるよう活動費に使わせていただきます。