代码命名之要

每一个程序员都想写出一段整洁而富有艺术感的代码,让写代码从枯燥乏味的过程转化为可欣赏的艺术品。与世上其他很多事情相似,代码整洁之道也一样贵在细节。而代码细节最重要的一个体现方面是代码命名的规范与注意事项。

代码中,随处可见命名。变量,函数,参数,类,封装包,目录,jar文件,war文件,ear文件等都需要精确化命名。下面讨论一下代码命名注意事项:

名副其实

代码中的命名合理化需要名副其实,最让读者头疼的那些诸如“int d; List list1;”等这样的命名方式,这些名称表达的不是代码的精简度,而是模糊度,其所代表的意义并未明确体现出来。名副其实的命名方式,变量/函数/类的名称应该就已经答复了其所代表的相关事项:例如,它为什么会存在,它做什么事,应该怎么用等此类问题。如果名称需要额外的注释来补充,那就不算名副其实。

避免误导

程序员应该避免掩藏代码本意的错误线索

  1. 错误地使用一些约定俗成与本意相悖的词容易误导读者。例如,使用"String[] accountList"来表达一组帐号,accountList容易让读者误认为是一个List数据类型;
  2. 在代码不同区域使用外形相似的两个不同的变量名容易误导读者,例如:XYZControllerForEfficientHandingOfStrings和另一处的XYZControllerForEfficientStorageOfStrings。
  3. 变量名拼写前后不一致,不同的局部变量,但中系统中表达的意思确是一样的。此时需要保持变量命名的一致性,增强读者理解容易度。
  4. 应用小写l和大写O作为变量名,尤其是中组合中单独使用,他们看起来更像“一”和“零”。

做有意义的区分

有时,为了区分概念相近但却不同的变量时,很多时候我们可能会随便修改其中一个变量让编译器识别它们的不同。导致的结果就是,以错误的拼写方式命名,或者随手添加一些数字或字母等没有明确意义的字符。我们把这些额外添加的符号看成废话,这些额外的符号丝毫不能说明变量之间有说明区别。例如,zork和theZork具体的区别到底是什么?又例如,nameString一定会比name好么?难道name还有可能是浮点数不成?这里的nameString中的String即可认为是废话。

要区分名称,就要以读者能鉴别不同之处的方式来区分。

使用读得出来的名称

很多朋友会用缩写方式命名,此时我们需要注意能让变量名称可以读出来。例如,程序里有个genymdhms(生成日期,年/月/日/时/分/秒),请问这个名称怎么读?

使用可搜索的名称

单字母和数字常量有个问题,很难中大片代码中搜索出来。因此,长名胜过短名,不过前提是长名中不要用没有任何意义的废话。这样反而让程度不够精简。

避免使用编码

程序中最好不要自己约定代码习惯,例如,自己中系统中规定类成员变量前统一加一个前缀等这样方式。当你的代码规模较大,要统一所有人按照你的编码习惯难度很大,一旦这个习惯被打破,那之前添加的那些前缀便衍生为废话了。

类名

类名和对象名应该是名词,避免使用Manager,Processer,Data或Info这样没有具体化实际意义的类名。

方法名

方法名应当是一个动词短语。

别用双关语

避免将统一单词用于不同目的的场合。同一术语用于不同概念,就是双关语了。例如,有些方法是实现添加操作,会用add,而另外一些方法是插入,则最好用insert,如果是末尾添加元素,最好用append。如果这里所有的情况都用add,就体现不出这些方法操作上的细小区别了。

添加有意义的语境词汇

很命名中不同地方表达相似概念,如何区分不同的概念?一个有效的方法是添加命名的语境词汇,可以通过添加前缀方式,例如addrFirstName, addrLastName, addrState等。但此时的语境词汇需要明确表达其中的意义,不能添加一些看出来意义的废话语境。

总结

本文总结于《代码整洁之道》,代码命名最重要的是:有意义+简洁。

你可能感兴趣的:(代码命名之要)