代码整洁之道(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
开头
避免思维映射
不应当让读者在脑子里把你的名称翻译成他们熟知的名称。
类名
应该用名词或者名词短语,不应当用动词。
方法名
方法名应该是动词或者动词短语,比如postPayment
、deletePage
。
别扮可爱
不要卖萌。HolyHandGrenade
有人知道是干嘛的么?
不要用不常用的俚语。比如不要用whack
来表示kill
。
每个概念对应一个词
要用get
就全都用get
,不要fetch
、retrieve
和get
这种含义相似的词混用。
别用双关语
避免将一个词用于不同的目的。比如很多类都有 add 这个方法,该方法通过增加或者连接两个现存的值来获得新的值。如果有个新的类,有一个方法是将某个元素增加到某个集合中。这时就不要也用 add 了。换个例如 append,insert 的名字。
使用解决方案领域的名称
你的代码只会有别的程序员才读。所以尽管使用领域相关的名称。比如JobQueue
。
使用源自所涉问题领域的名称
如果不能用自己熟悉的领域的术语来命名,就采用从所涉问题领域而来的名称吧。
添加有意义的语境
变量名最好在一定的语义下。例如firstName
、lastName
、street
、houseNumber
、city
、state
和zipcode
在一起的时候,你就很容易明白这表示的是地址。
如果上下文语义不够,可以考虑给变量名加前缀的方法。例如addrFirstName
。当然,更好的方案是有一个 Address 的类。
不要添加没用的语义
如果有个应用叫『加油站豪华版』(Gas Station Deluxe),那么给每个类都加一个 GSD 的前缀就是纯属吃饱了撑的。