關於起名

從機器的視角來看,變量、函數、類……的名字,是用來區別其它事物的。
從人的視角來看,區別其它事物只是對名字最基本的要求,名字還要能幫助讀者理解代碼。javascript

爲了讓讀者更好地理解代碼,起名時下面兩點須要注意:java

  1. 避免歧義 - 讓讀者正確理解
  2. 說明 what 而不是 how - 提升讀者理解效率

1. 避免歧義

const limitOfLoginTries = 5;

這個變量用於定義:密碼輸入錯誤多少次,用戶將會被鎖定。編程

到底 錯 4 次會鎖定 仍是 錯 5 次會鎖定?
limit 在是否包含邊界值的問題上存在歧義。這裏用 max 更好。函數式編程


const getPath = (start, end) => {
  // expensive calculation
  ......
}

這個方法用於計算起點與終點間的路徑。函數

get 操做常見於從 map 中取一個元素。
潛意識會以爲它是一個輕量級的操做。
但示例方法會執行復雜的計算。方法調用者容易掉以輕心,重複調用,最終致使性能問題。
這裏用 caculate 更好。性能

上述兩個例子來源於《編寫可讀代碼的藝術》這本書。rest

2. 說明 what 而不是 how

const moneyMultiplyRatio = money * 0.027;

錢乘以一個比例,名字和代碼說的同樣。
看完了仍是不知道這個變量想幹嘛。
若是是利息的話,用 interest 要好得多。code


用變量名錶達變量的意圖。
給一段代碼起個名字,表達代碼的意圖,就是 functionip

把大象裝冰箱,閱讀理解 3 行名字 顯然比 100 行實現細節 更有效率。get

refrigerator.open();
refrigerator.put(elephant);
refrigerator.close();

這和函數式編程中申明式的思想一致。

說明要幹什麼-what,隱藏技術細節-how。 寫的人思路更清晰,讀的人理解更輕鬆。

相關文章
相關標籤/搜索