命名的几个规则
1.名副其实
变量、函数或类的命名应该囊括了所有的大的问题。它该告诉你,它为什么会存在,它做什么事,应该怎么用。
如果名称需要注释来补充,那就不算是名副其实。
2.避免误导
程序员必须避免留下掩藏代码本意的错误线索(如UNIX,axi, sco)。
应当避免使用与本意相悖的词。
提防使用不同之处较少的名称,否则容易误导。避免使用o和l,与0和1太像了。
3.做有意义的区分
光是添加数字系列或是废话远远不够,即便这足以让编译器满意。如果名称必须相异,那其意思也应该不同才对。
如Product, ProductInfo, ProductData,Info和Data就是废话。
NameString不会比Name更好些。Table一词永远不应当出现在表名中。Variable一次永远不应当出现在变量名中。Customer与CustomerObject又有什么区别呢?
4.使用读的出来的名称
不要随意的使用简写缩写,很容易出笑话,应该更明确功能。
如genymdhms远不如写成generationTimestamp。
5.使用可搜索的名称
名称不是越减短越好。单字母和数字常量很难在一大篇文字中找出来。
使用能表达意图的名称,看似拉长了函数代码,但是这种能表达意图的代码却比数字或者字母更容易找到。
4.避免使用编码
1)Java程序员不需要类型编码,Java是强类型的语言,增加类型字符,纯属多余,增加了修改变量、函数或类的名称或类型的难度。并且还增加了阅读代码的难度。并且增加了误导读者的可能性。
2)不必使用前缀来标明成员变量。应当把函数或者类做的足够小,消除对成员前缀的需要。
3)接口和实现的命名,接口不要用I(terface)开头,我们不需要让使用者知道这是一个接口。
5.避免思维映射
明确是王道。不应当让读者在闹钟把你的名称翻译为他们所熟知的名称。
6.类名和对象名应是名词或名词组成的短语。
7.方法名应当是动词或动词短语。
8.别扮可爱,使用一些好玩但无益于代码可读性的词。
9.每个概念对应一个词,如果使用了get,就不要在其他相似的功能上再使用fetch,retrieve等。
函数命名应当独一无二,并且保持一致。
10.别用双关语
11.使用解决方案领域的名称,也就是程序员能够懂得名称。
12.使用源自所设计问题领域的名称,如果不能使用程序员所熟系的术语来给手头的工作命名,这样负责维护代码的程序员就可以去请教该领域的专家了。
13.添加有意义的语境。很少有名称是你能够自我说明的--多数都不能。反之,你需要用良好的命名、函数或者名称空间来放置名称,给读者提供语境。
假想有名为firstName,lastName,street,houseNumber,city,state和zipcode的变量。
当它们放在一起的时候,很明确构成了一个地址。不过,假使只在某个方法中看见孤零零的一个stage变量,我们就会无法确定它是地址的某一个部分了。
可以添加前缀addr,以此提供语境。至少读者会明白这些变量是某个更大结构的一部分。
14.不要添加没用的语境,名称足够清楚,就比长名称更好。