🎯 什麼情境該想到我

當你「一份資料在很多地方被修改,改著改著在某個沒預期的角落引發錯誤」的時候——你很難再確定某個時刻它到底是什麼狀態。

⚙️ 怎麼用(步驟 / 公式)

這味道是什麼徵兆:對資料的修改常導致難以預料的後果與難查的 bug——你在一處改了值,卻在另一個看似無關的地方爆炸。函數式程式設計的觀念是資料永不改變、更新即產生新副本;現實中不必極端,但要盡量控制「可變」的範圍與入口。

通常用哪些重構手法對治:

  • 封裝變數(Encapsulate Variable):讓所有更新都經過少數幾個函式,方便監控與演進。
  • 將查詢與修改分離(Separate Query from Modifier):確保「取值」的函式沒有副作用,能安心呼叫。
  • 以查詢取代暫時變數(Replace Temp with Query):減少會被反覆賦值的中間變數。
  • 搭配移除設值函式(Remove Setting Method)拆分變數(Split Variable)(一個變數別身兼多職)。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 完全不可變在效能或現實上未必可行;目標是「縮小並看管」可變範圍,不是消滅所有變動。
  • 一個變數若在不同階段承載不同意義,先用拆分變數釐清,別急著封裝。

🔗 相關工具