🎯 什麼情境該想到我
當你「面對一個又長又難一眼看完、要不斷捲動的函式」的時候——尤其它內部其實包含好幾個各自獨立的小任務。
⚙️ 怎麼用(步驟 / 公式)
這味道是什麼徵兆:函式越長越難理解,因為讀者得同時記住很多細節與中間狀態。真正該追求的是「意圖」與「實作」分離——函式名說出做什麼,函式體怎麼做。積極地把「一段做某件事的碼」抽成有名字的小函式,是最有效的整理。
通常用哪些重構手法對治:
- 提煉函式(Extract Function):最主力手法,把每個可命名的意圖抽成小函式。
- 以查詢取代暫時變數(Replace Temp with Query):清掉妨礙提煉的中間變數。
- 分解條件式(Decompose Conditional):把龐大的 if/else 判斷與分支各自抽成有名字的函式。
- 參數過多時搭配引入參數物件、保持物件完整。
判斷準則不是行數,而是「意圖與實作的語義距離」:只要一段碼需要註釋解釋,就適合抽成以該註釋為名的函式。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 別只看行數就切;抽出來的每個小函式都要有清楚的名字與單一意圖。
- 若抽得太碎、彼此傳遞一堆參數,反而更難讀,考慮改用參數物件或提煉類別。
🔗 相關工具
- 重複程式碼 Duplicated Code(提煉函式同時消除重複)
- 過長參數列 Long Parameter List(切小函式時要留意參數不要爆炸)
- 註釋 Comments(區塊註釋常是「這裡該提煉一個函式」的提示)
- 重構