可朗誦與可搜尋的名字 (Pronounceable & Searchable Names)

★★★★★Draft

FromClean Code

📚 From the Books

可朗誦與可搜尋的名字 (Pronounceable & Searchable Names)Naming

寫程式是一項社交活動:名字不只要被編譯器讀懂,還要能被人「唸出來」和「找出來」。唸得出來的名字讓 Code Review 與討論順暢,找得到的名字讓維護時能精準定位。這兩件事看似瑣碎,卻決定了名字在真實團隊協作裡好不好用。

🧠 Why It Matters

NOTE

「唸得出來」是一個很實際的檢驗:試著把這個名字在會議上講給同事聽。如果你會忍不住把它一個字母一個字母拼出來,或是得補一句「就是那個 avg grd 的」,那它就還不夠好。

⚖️ Case Study

前 — 唸不出來的名字
// 在 Code Review 上要怎麼開口討論 calcAvgGrd 和 sGrds?
function calcAvgGrd(sGrds) {
  let sum = 0;
  for (const g of sGrds) sum += g;
  return sum / sGrds.length;
}

calcAvgGrdsGrds 被硬生生擠掉母音,變成一串像密碼的縮寫。它們能通過編譯,卻無法被自然地講出來——討論時只能拼字母,溝通成本瞬間拉高。

後 — 像自然語句一樣好唸
// 清晰、像英文句子,講出來就懂
function calculateAverageGrade(studentGrades) {
  let sum = 0;
  for (const grade of studentGrades) sum += grade;
  return sum / studentGrades.length;
}

calculateAverageGradestudentGrades 讀起來像自然語言,在口頭討論裡可以直接唸出來、彼此對齊。名字沒有變得更「聰明」,只是變得可以被人講。

TIP

母音不是可有可無的裝飾。刪掉母音省下的幾個字元,換來的是一個沒人唸得出來的名字——這筆交易幾乎永遠不划算。

前 — 難以搜尋的魔術數字
// 數字 7 的意義不明,而且很難搜尋(整份程式碼到處都是 7)
function isOverloaded(count) {
  return count % 7 === 0;
}

7 沒有名字,讀者無從得知它代表什麼;更糟的是當你想找出「這個規則用在哪些地方」時,搜尋 7 會撈出滿滿的雜訊,根本定位不到。

後 — 具名常數,一搜就到
const MAX_CLASSES_PER_STUDENT = 7;

// 語意清晰,而且 MAX_CLASSES_PER_STUDENT 是一個可以被精確搜尋的名字
function isOverloaded(count) {
  return count % MAX_CLASSES_PER_STUDENT === 0;
}

把魔術數字提取成具名常數後,7 一次就有了意義,也有了一個獨一無二、可被 grep 精確命中的名字。要改上限時只改一處,要追蹤用途時搜尋名字即可。

WARNING

單一字母的名字最大的問題是「搜不到」。在整份程式碼裡找 e,你會被無數個含 e 的字詞淹沒。這正是為什麼即使是很小的變數,只要它需要被搜尋,就值得一個真正的名字。

🔑 Takeaways

✍️ My Notes

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

📖 Further Reading