1.名副其實
變量姨伤、函數(shù)或類的名稱應該答復了所有的大問題塑荒。比如它為什么存在,它做什么事情姜挺,應該怎么用齿税。如果名稱需要注釋來補充,那就不是名副其實炊豪。
int d;// 消逝的時間凌箕,以日計
名稱d什么野沒說明,他沒有引起對時間消逝的感覺词渤,更別說以日計牵舱。
我們應該指明計量對象和計量單位的名稱:
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
2.避免誤導
程序員必須避免留下掩藏代碼本意的錯誤線索。應當避免使用與本意相悖的詞缺虐。
別用accountList來指稱一組賬號芜壁,除非它真的是List類型。List一詞對程序員有特殊意義。
提防使用不同之處較小的名稱慧妄。
XYZControllerForEfficientHandlingOfString 和另一處 XYZControllerForEfficientStorageOfString ,區(qū)分起來會很花時間顷牌。
3.做有意義的區(qū)分
如果程序員只是滿足編譯器或解釋器的需要而寫代碼,就會制造麻煩塞淹。
例如窟蓝,因為同一作用范圍內(nèi)兩樣不同的東西不能重名,你可能會隨手改掉其中一個的名稱饱普。有時干脆以錯誤的拼寫充數(shù)运挫,結果就是現(xiàn)在更正拼寫后導致編譯器出錯的情況。
public static void copyChairs(char a1[],char a2[]) {
for(int i = 0, i < a1.length, i ++) {
a2[i] = a1[i];
}
}
如果修改名稱為source和destination套耕,這個函數(shù)就會像樣許多谁帕。
廢話是另一種沒有意義的區(qū)分。假如你有兩個Product類冯袍,還有一個叫ProductInfo 或者 ProductData 類匈挖,那他們的名稱雖然不一樣,意思卻無區(qū)別颠猴。
4.使用讀得出來的名稱
人類長于記憶和使用單詞关划,名稱讀不出來小染,感覺就是溝通困難翘瓮。
有家公司,程序里面寫了一個 genymdhms(生產(chǎn)日期裤翩,年资盅、月、日踊赠、時呵扛、分、秒)筐带,他們一般讀作“gen why emm dee aich emm ess”即字母的讀音今穿,有見字讀音的習慣就會讀成“gen-yah-mudda-hims”。后來人根本不知道這個名詞的意義伦籍。這是自造詞蓝晒,而非恰當?shù)挠⒄Z詞。
class DtaRcrdl02 {
private Date genymdhms;
private Date modymdhms;
private final String pszqint = "102";
...
};
class Custmer{
private Date generationTimestamp;
private Date modificationTimestamp;
private final String recordId = "102";
...
}
5.使用可搜索的名稱
單字母名稱和數(shù)字常量有個問題帖鸦,就是很那在一大篇文字中找出來芝薇。
找MAX_CALSSES_PER_STUDENT 很容易,找到一個數(shù)字7就很困難了作儿。
6.避免使用編碼
編碼已經(jīng)太多洛二,無畏再自找麻煩。
把類型或作用域編進名稱里面,徒然增加了解碼的負擔晾嘶。帶編碼的名稱也不方便發(fā)音妓雾,容易打錯。
PhoneNumber phoneString;// 類型變化時变擒,名稱并不變化
有時會出現(xiàn)采用編碼的特殊情形君珠。比如,你在做一個創(chuàng)建形狀的抽象工廠(AbstractFactory)娇斑。該工廠是個接口策添,要用具體的類來實現(xiàn)。怎么命名呢毫缆?IShapeFactory 和 ShapeFactory 嗎唯竹?肯定ShapeFactory。前綴字母I被濫用苦丁,說好聽是干擾浸颓,說難聽點就是廢話的程度。
7.避免思維映射
不應當讓讀者在腦中把你的名稱翻譯成他們熟知的名稱旺拉。明確是王道产上。
8.類名
類名和對象名應該是名詞,不應當是動詞
如 Custmer蛾狗,WikiPage晋涣,Account等,避免使用Manager沉桌、Processor谢鹊、Data或Info這樣的類名。