「触ると壊れるコード」第3回:関数を分けたら壊れた話
「整理しただけなのに…」
実務あるある
👉 処理が長い
👉 関数に分ける
👉 読みやすくする
結果
👉 呼び出し順で壊れる
元のコード
def process_order(order):
order["price"] *= 0.9
order["tax"] = order["price"] * 0.1
print(order)👉 シンプル
👉 ちゃんと動く
よくある改善
👉 「関数分けよう」
def apply_discount(order):
order["price"] *= 0.9
def apply_tax(order):
order["tax"] = order["price"] * 0.1
def process_order(order):
apply_discount(order)
apply_tax(order)
print(order)👉 スッキリした
👉 読みやすくなった
👉 一見よさそう
ここで1行修正
別の人がこう変える
def process_order(order):
apply_tax(order) # ← 順番変更
apply_discount(order)
print(order)何が起きるか
👉 税額が変わる
なぜ?
元
割引後に税計算変更後
税計算後に割引🔥 ここが本質
関数を分けたことで
👉 順番依存が見えにくくなった
元のコードは
👉 上から読めば流れが分かった
分割後は
👉 「どの順番が正しいか」が関数名だけでは分からない
結果
👉 呼び出し順で壊れる
👉 関数を分けただけでは安全にならない
今日のポイント
👉 関数分割 = 依存が消えるわけではない
📚 もう一歩深く理解したい人へ
👉 「じゃあどう分ければいいの?」と思った人へ
Effective Python 第3版
👉 副作用・順番依存を減らす考え方が学べます
Clean Architecture 達人に学ぶソフトウェアの構造と設計
👉 責任と依存の整理がかなり理解しやすいです
※上記リンクはアマゾンアソシエイトを利用しています
実務だとこうなる
初期化順で壊れる
呼び出し順で結果が変わる
共通関数化したら逆に追いにくくなる
👉 全部同じ構造
次回予告
👉 「ifを追加したら壊れた話」
ひとこと
👉 この2つの関数、順番変えても安全ですか?
いいなと思ったら応援しよう!
応援お願いします!
より良い情報を提供できるよう活動費に使わせていただきます。