2 命名
名不正言不顺、顾名思义、名如其人;
可见命名之重要,我们在编码过程中,到处都会遇到命名,而多数人对命名草率处置,事实上糟糕的命名是烂代码的罪魁祸首,因此我们必须把命名上升到一个高度来认识。
2.1 命名的总则
简洁精确、名副其实、一以贯之、勇于重构
名字是对一个具体事务最简洁的陈述,它能够清晰的、如实地反映事务本身,不能词不达意,更不能张冠李戴,要认识到起一个好名字是不容易的,是需要思考和花时间的,但它会在后续的过程中跟你更多的回报。
名字要简洁,但必须意思完整,例如一个变量命名为Number,意思就不完整,是什么Number啊?我们许多程序员的程序中充满了类似的命名,半截子话,需要你猜。
好的名字一目了然,不需要读者去猜,甚至不需要注释
为了起名字更加规范、容易,要求各项目必须根据具体技术领域(解决方案领域)、业务领域(问题领域)制定详细的命名字典,全面明确的定义该项目中使用的全部名次、动词、形容词、动名词等,并制定各种事务的详细命名规范,项目组成员要根据命名字典和命名规范进行命名。
一个体系中每个概念只能唯一对应一个词,不要一意多词,也不要一词多意。
发现一个不好的名字就及时重构。
2.2 命名指导原则
类名:使用名词或名词短语,不能使用动词,要简洁明确,避免使用似是而非的词。如:
AccountInfo,AccountData,Info、Data到底是什么意思,有和区别不如就用Account。
我们的命名规范中规定类名前增加两到三个大写字母,用于表达类的归属,两个字母用于平台级,三个字母用于应用级,这有利于区别应用类和通用jar包的类,是好的办法,但必须事先制定好归属代码的规范。
方法名:使用动词或动词短语,属性访问器遵循JavaBean的标准(get、set、is)。
一个方法必须只做一件完整的、独立的事,名字必须精确表达该方法的具体行为,努力为方法起个好名字,有时你很难为一个方法起一个恰当的好名,往往表明两件事:
1)你对这个方法到底要做什么还不明确(设计有问题);
2)这个方法做的事情太多,违背了方法简单、独立的原则。
因此命名还会纠正设计问题,有关方法的问题我们在后面还会专题讨论。
方法名以小写字母开头。
属性名:使用名词、名词短语或动名词;
属性名是类下面的子概念,不必重复类名;
Java通行规范约定属性名以小写字母开头,我们规定以大写字母开头,这样即可以简单地识别属性名,在类似的赋值语句中略去讨厌的this.
this.Name = name;
Name = name;
变量和参数名:使用名词、名词短语或动名词;
除了循环变量和简短的数学运算可以采用单字母(或双字母)变量外,一律采用简洁且含义精确的名称,如:AccNo,我们推荐使用缩写,但必须使用统一一致的缩写规范。
循环变量可以使用i、j、k、n、m,避免使用l、o;
项目、包、目录名:
一个系统可能会建立一个以上的项目、包和目录等,这些都涉及到命名,必须在如上的规则指导下,由总体组统一制定具体名称。