在小朱元璋出生一個月後,父母為他取了一個名字(元時慣例):朱重八,這個名字也可以叫做朱八八。我們這裡再介紹一下,朱重八家族的名字,都很有特點。
朱重八高祖名字:朱百六;
朱重八曾祖名字:朱四九;
朱重八祖父名字:朱初一;
他的父親我們介紹過了,叫朱五四。
取這樣的名字不是因為朱家是搞數學的,而是因為在元朝,老百姓如果不能上學和當官就沒有名字,只能以父母年齡相加或者出生的日期命名。(登記戶口的人一定會眼花)–《明朝那些事兒》
那麼問題來了,朱四九和朱百六是什麼關係? 你可能馬上懵逼了。所以說:命名不僅僅是一種科學,更是一種藝術
。
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...
參考資料
- 《程式碼整潔之道》
- 《明朝那些事兒》