適度的間接層有幫助,但不必要的層次只會礙事。當一個函式的本體已經和它的名字一樣清楚,那層委託就是多餘的——把它合回呼叫端,讓真正的意圖直接顯現。
🧠 Why It's a Problem
內聯是 Extract Function 的反向手法。抽取的目標是「以名代義」,但抽過頭、或名字沒比本體更清楚時,那層間接反而讓人看不清邏輯。
- 過度間接:函式除了委託給另一個函式外什麼都不做,讀者得多跳一層才看到真正邏輯。
- 清晰優先於抽象:內聯小型、簡單的函式,讓呼叫端直接展現意圖。
- 效能非首要考量:現代編譯器通常會自動處理內聯,這裡的主要目標是可讀性。
TIP
判準很簡單:這個函式名有沒有比它的本體更會說話? 沒有的話,這層委託只是在增加閱讀成本。
⚖️ Refactoring
機械步驟:① 確認這不是多型方法(子類覆寫的不能直接內聯)→ ② 找出所有呼叫點 → ③ 把每個呼叫換成函式本體 → ④ 逐一測試 → ⑤ 移除原函式定義。
前 — 瑣碎委託模糊了意圖
function calculateProduct(x, y) {
return x * y;
}
const result = calculateProduct(5, 10);
console.log(result);calculateProduct 只是替 x * y 換個名字,並沒有隱藏任何複雜度,卻多逼讀者跳一層。
後 — 本體直接說話
const result = 5 * 10;
console.log(result);運算直接攤在呼叫端,那層無謂的委託消失了。
WARNING
內聯和抽取是一對相反的力:不是越少函式越好,也不是越多越好。目標永遠是清晰——該藏複雜度時抽取,該去掉無謂委託時內聯。
🔑 Takeaways
- Inline Function 是 Extract Function 的反向手法:把只會委託、沒有藏住複雜度的函式合回呼叫端。
- 觸發訊號:過度間接、函式名沒比本體更清楚。
- 效能不是理由——重點是可讀性,編譯器會自己處理內聯。
- 抽取與內聯是一對工具,交替使用讓程式碼停在「最清楚」的那個點。
No notes yet — jot your takeaways or Q&A here.