程式碼整潔之道 – 有意義的命名

wangduanduan發表於2019-02-16

在小朱元璋出生一個月後,父母為他取了一個名字(元時慣例):朱重八,這個名字也可以叫做朱八八。我們這裡再介紹一下,朱重八家族的名字,都很有特點。
朱重八高祖名字:朱百六;
朱重八曾祖名字:朱四九;
朱重八祖父名字:朱初一;
他的父親我們介紹過了,叫朱五四。
取這樣的名字不是因為朱家是搞數學的,而是因為在元朝,老百姓如果不能上學和當官就沒有名字,只能以父母年齡相加或者出生的日期命名。(登記戶口的人一定會眼花)–《明朝那些事兒》

那麼問題來了,朱四九和朱百六是什麼關係? 你可能馬上懵逼了。所以說:命名不僅僅是一種科學,更是一種藝術

1 名副其實

// bad
var d; // 分手的時間,以天計算

// good
var daysAfterBrokeUp; // 分手以後,以天計算

2 避免誤導

// bad
var nameList = `wdd`; // List一般暗指資料是陣列,而不應該賦值給字串

// good
var nameList = [`wdd`,`ddw`,`dwd`]; // 

// bad
var ill10o = 10; //千萬不要把i,1,l,0,o,O放在一起,傻傻分不清楚

// good
var illOne = 10;

3 做有意義的區分

// bad
var userData, userInfo; // Data和Info, 有什麼區別????, 不要再用data和info這樣模糊不清的單詞了

// good
var userProfile, userAcount

4 使用讀得出來的名稱

// bad 
var beeceearrthrtee; // 你知道怎麼讀嗎? 鼻涕阿三??

// good
var userName;

5 使用可搜尋的名稱

// bad
var e = `not found`; // 想搜e, 就很難搜

// good
var ERROR_NO_FOUND = `not found`;

6 方法名一概是動詞短語

// good
function createAgent(){}
funtion deleteAgent(){}
function updateAgent(){}
function queryAgent(){}

7 儘量不要用單字母名稱, 除了用於迴圈

// bad
var i = 1;

// good
for(var i=0; i<10; i++){
    ...
}

// very good
userList.forEach(function(user){
    ...
});

8 每個概念對應一個詞

controller和manager, 沒什麼區別,要用controller都用controller, 要用manager都用manager, 不要混著用

9 建立專案詞彙表, 不要隨意創造名稱

user, agent, org, queue, activity, device...

參考資料

  • 《程式碼整潔之道》
  • 《明朝那些事兒》

相關文章