有意义的命名----命名工作伴随着整个编码过程
命名规则:
1、名副其实
通过命名,就可以大概得知变量,方法,类的用途
有更好的命名的时候,要替换掉旧的
2、避免误导
如果命名有掩盖变量,方法,类的本来用途的时候,就要替换掉。
像是accountList,用来指示一组账号。可是List像是在说明这是一个列表类型的账号列表。
可是这组账号不一定是列表类型,只是单纯的想表示,这个变量用来存储一组账号信息。
所以这里比较好的命名是:accountGroup/bunchOfAccount/accounts
不同变量,方法,类的命名不应该在细微处有所不同。
如XXXHandlerRequestOfXXX与XXXHandlerReponseOfXXX,在命名的起始处,就表明不同会好点
3、做有意义的区分
如果只是为了满足编译器的需要而写代码,不同变量之间使用数字或者废话区分是远远不够的
像是a1,a2,…,an。这些命名完全不知道这些变量是用来干什么的。
像是要有一个方法,要把arg1[]的值 复制到arg2[]
public static void Copy(T[] Source,T[] Destination){};
这样的声明方式,一眼就可以看出第一个参数是源数组,第二个参数要接收拷贝的参数。
4、使用读的出来的名称
避免使用多个名词组合在一起的缩写的新创词,因为使用了,再给新的开发者的时候,都要进行说明
5、使用可搜索的名称
数字5可能难于查找,可是WORK_DAYS_PER_WEEK是很好找的,也能体现这个变量的意图。
这是表明尽可能避免使用单字母命名的变量
6、避免使用编码
(1)把类型和作用域体现在名称中----匈牙利语标记法----不要使用
(2)消除命名过程对于前缀的需要,像是m_day,这里的m_。为了更好的表现这个变量的用途
如果是工作日workday,休息日weekend等等。
7、接口与实现类
当一个类中的方法是通过实现接口的,这个方法的命名尽可能的使用贴切实际意义的命名,而不是使用IXXX用来说明这是一个接口方法
8、避免思维映射
在作用域较小的时候,像是在循环计数器中的计数器使用i,j,k是比较常用的做法
在命名的时候,不要把自己认为的当作大众认为的,像是ymd,映射成year_month_day实属没有必要
9、类名与方法名
类名使用名词
方法名使用动词
10、别扮可爱
命名应该直接表示用途
HolyHandGrenade并没有DeleteItems来的更好
11、每个概念对应一个词
给每一个抽象概念一个词,并且这使用这个抽象概念的时候不更换词语
像是管理控制的类,不应该一个地方使用manager,一个地方用controller另一个地方使用driver
如果是管理的类统一使用manager或者统一使用controller后缀会比较合适
12、不要使用相关语
像是在一个collection中加入元素,不应该使用双关语add,这会让人以为是两个值进行相加的方法
使用insert 或者append都会好很多
13、使用解决方案领域中的名称
如果是解决某一领域中的解决方案,不应该使用领域来命名。
使用计算机科学术语,算法名,方法名,数学术语才是合适的。
像是访问者模式中AccountVisitor富有意义。
当然如果不能使用程序员熟悉的术语命名,也可以使用相关领域中涉及的名称
14、添加有意义的语境
firstName、lastName
如果放在Student类中就是人的名字
如果放在Address类中就是地址的名字
15、不要添加没有意义的语境
只要短的名称足够清楚,就比长名称好
Address是一个好的类名
而accountAddress更适合做类变量的名字