名副其實:
變量、函數或類的名稱就能夠說明為什么它存在,做什么事,怎么用,如果需要注釋來補充,就不算名副其實:
//消逝的時間,以日計, bad!
int d;
//good
int daysSinceCreation;
int daysSinceModification;
避免誤導
避免留下隱藏代碼本意的錯誤線索。
accountList 一組賬號,如果類型不是List會引起誤判,accountGroup或bunchOfAccoutns,甚至accounts,更可怕的例子:使用小些字母l跟字母O作為變量名
做有意義的區分
代碼是寫給人看的,僅僅是滿足編譯器的要求,就會引起混亂
- 以數字系列命名:void copyChars(char a1[],char a2[]) ==> void copyChars(char source[],char destination[])
- 說廢話: a, an, the, Info, Data
- 使用可讀的名字:避免過度使用縮寫,genymdhms (生成日期,年月日時分秒)
- 使用便于搜索的名稱:避免使用Magic Number,避免使用單字母,或出現頻率極高的短字母組合(注意度的把握);MAX_CLASSER_PER_STUDENT 跟 “7” “e”
類名
類名和對象名應該是名詞或名詞短語,Customer、Account
方法名
動詞或動詞短語:deletePage、save,屬性訪問、修改和斷言:加上get、set和is
別裝可愛
使用俗語或俚語, eatMyShorts()表示abort() eatMyShorts:去死吧
每個概念對應一個詞
給每個抽象概念選一個詞,并一以貫之。比如獲取數據可以使用fetch、retrive、get這些詞語,但最好能夠統一使用一種(controller、manager類似)
名字盡量來自解決方案領域或問題領域:
- 使用解決方案領域名稱:使用計算機領域的科學術語、算法名、模式名等。如AccountVisitor:Visitor模式實現的Account類。
- 使用問題領域的名稱:如果不能用程序員熟悉的術語來命名,就采用所涉問題領域的名稱。排序==> sort
適當使用有意義的語境:
- 良好命名的類、函數、名稱空間來放置名稱,給讀者提供語境
- 給名稱前加前綴:firstName、lastName、street、houseNumber、city、state和zipcode,和在一起知道是地址,孤零零時無法推斷, state=》addrState
- 事不過三,如果傳遞給函數的變量超過三個,考慮封裝成概念,添加struct或class
- 不要添加沒用的語境