有意义的命名

名副其实:

变量、函数或类的名称就能够说明为什么它存在,做什么事,怎么用,如果需要注释来补充,就不算名副其实:

1
2
3
4
5
6
//消逝的时间,以日计, 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
  • 不要添加没用的语境