內聯函式 (Inline Function)

★★★★Draft

FromRefactoring

📚 From the Books

內聯函式 (Inline Function)Refactoring Moves

適度的間接層有幫助,但不必要的層次只會礙事。當一個函式的本體已經和它的名字一樣清楚,那層委託就是多餘的——把它合回呼叫端,讓真正的意圖直接顯現。

🧠 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

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading