函式宣告是連接程式碼各部分的關節——它對可讀性和設計有深遠影響。一個選得好的名字,能讓你不必看實作就懂函式用途,還會引導出更廣泛的改進。
🧠 Why It's a Problem
宣告包含名字、參數的名稱與順序。它是介面,是別人第一眼會讀到的東西。名字含糊、參數排列不合領域直覺,理解成本就轉嫁給每一個呼叫者。
- 命名不清:當前名字無法傳達函式的意圖。
- 領域演進:隨著對領域理解加深,更新參數名稱或順序,讓簽章更貼近領域概念。
- 統一慣例:讓名字與簽章符合專案的風格指南。
TIP
Fowler 建議先想好「假如這個函式一開始就取好名字,我會怎麼寫它的呼叫端?」——先想好呼叫的樣子,再回頭改宣告。
⚖️ Refactoring
機械步驟(簡單做法):① 想好新的宣告 → ② 找出所有舊宣告的引用點 → ③ 一次改掉宣告與全部呼叫點 → ④ 測試。對難以一次改完的情況,可用「遷移式」做法:先建新函式、讓舊函式委託給它,再逐步搬移呼叫端。
前 — 名字沒說清楚意圖
function addNumbers(x, y) {
return x + y;
}
const result = addNumbers(5, 3);
console.log(result);addNumbers 描述的是「怎麼做」,沒點出這個函式在領域裡代表什麼。
後 — 名字傳達領域意圖
function calculateSum(x, y) {
return x + y;
}
const result = calculateSum(5, 3);
console.log(result);宣告換成 calculateSum 後,呼叫端讀起來更貼近意圖;所有引用點也一併更新到新名字。
NOTE
當參數列表變長、或幾個參數老是成群結隊一起出現,更改宣告常會自然帶出 Introduce Parameter Object——把那組參數打包成一個物件。
🔑 Takeaways
- 函式宣告是介面與關節:名字與參數決定別人理解與使用它的成本。
- 觸發訊號:命名不清、領域演進、要統一慣例。
- 先想好理想的呼叫端長相,再回頭改宣告。
- 一次改不完時用遷移式做法:新函式先由舊函式委託,再逐步搬。
- 參數成群時,接著考慮 Introduce Parameter Object。
No notes yet — jot your takeaways or Q&A here.