代码整洁之道(1):有意义的命名

基本思想是变量名、方法名要做的见名知意,做到名字就可以自解释。

名副其实

名字要表达其作用。

单字母的 a、b、c、d 这种变量名当然是要杜绝的。

莫名其妙的一个数字当然也是不好的。用有意义的宏,或者常量来代替。

theList这种变量名,什么意义都没有表达,莫名其妙的名字也是很糟糕的。改成更有意义的如gameBoard这样的名字。

避免误导

例如 hp、aix 这种专有名字,最好就不要用来表示自己的变量名。容易产生误导。

accountList 这种带类型的名字,如果真的是 list 类型,还稍微好点,万一不是用 list 实现的,那就会造成误导了。

小写字母 l 和大写字母 O 就不说了,遇到某些字体,和数字 1 和 0 就没法分了。

做有意义的区分

a1、a2 这种不知所云就不说啥了。改成 source 和 destination 就会比较明显了。

不要用废话区分。比如 ProductInfo 和 ProductData,看似名字不一样,但是表达的意思其实基本是一样的。

使用读的出来的名称

genymdhms(生成年月日时分秒)你知道表达什么嘛。换成generationTimestamp呢。

使用可搜索的名称

如果有个变量名叫e,在一大段代码里,怎么找出来所有用到的地方呢?

避免使用编码

变量名不用带上类型了。

反对匈牙利命名法。

不需要使用m_这样的前缀表明是成员变量了。

接口也不需要用I开头

避免思维映射

不应当让读者在脑子里把你的名称翻译成他们熟知的名称。

类名

应该用名词或者名词短语,不应当用动词。

方法名

方法名应该是动词或者动词短语,比如postPaymentdeletePage

别扮可爱

不要卖萌。HolyHandGrenade有人知道是干嘛的么?

不要用不常用的俚语。比如不要用whack来表示kill

每个概念对应一个词

要用get就全都用get,不要fetchretrieveget这种含义相似的词混用。

别用双关语

避免将一个词用于不同的目的。比如很多类都有 add 这个方法,该方法通过增加或者连接两个现存的值来获得新的值。如果有个新的类,有一个方法是将某个元素增加到某个集合中。这时就不要也用 add 了。换个例如 append,insert 的名字。

使用解决方案领域的名称

你的代码只会有别的程序员才读。所以尽管使用领域相关的名称。比如JobQueue

使用源自所涉问题领域的名称

如果不能用自己熟悉的领域的术语来命名,就采用从所涉问题领域而来的名称吧。

添加有意义的语境

变量名最好在一定的语义下。例如firstNamelastNamestreethouseNumbercitystatezipcode在一起的时候,你就很容易明白这表示的是地址。

如果上下文语义不够,可以考虑给变量名加前缀的方法。例如addrFirstName。当然,更好的方案是有一个 Address 的类。

不要添加没用的语义

如果有个应用叫『加油站豪华版』(Gas Station Deluxe),那么给每个类都加一个 GSD 的前缀就是纯属吃饱了撑的。