代码整洁之道(二)

第二章,有意义的命名

 

2.1介绍

2.2 命名需要名副其实,看到名称就能知道是什么意思,干什么用。

例如int d,毫无意义, int elapsedTimeInDays. 

2.3 避免误导  

类名Customer,比CustomerList 好,小写字母l和大写字母O作为变量,完全看起来像“壹” 和"零".

2.4 做有意义的区分。

public static void CopyChars(char a1[], char a2 [])  bad,完全没有提供正确信息

public static void CopyChars(char source[],char destination[]) good

废话是另外一种没有意义的区分,类 Product,ProductInfo,ProductData. 怎么区分?名字不同,意思却无区别。

NameString 不比Name 作为变量好

getActiveAccount()

getActiveAccounts()

getActiveAccountInfo()

程序员怎么知道调用哪个方法?

2.5 使用读的出来的名称。 在解释的代码是时候读不出变量的名字,多麻烦,不简明。

private Date genymdhms,bad,这个变量怎么读出来?

private Date generationTimestamp ,good,生成时间戳。

2.6 使用可搜索的名称.

搜索的时候,长变量更加容易搜索。做计算的时候,需要数字的,尽量写成常量,不要直接写数字。

int a=4; 怎么来搜?

Const int WORK_DAYS_PER_WEEK = 5 ;good

2.7避免使用编码. 编码已经太多,无需自找麻烦。

  string m_des. 前缀m多余。

Interface IShapeFactory  bad.

Interface ShapeFactory good. 不需要前缀I。

2.8 避免思维映射.

int a, int b, 然后很自觉的定义为,int c.

2.9 类名 

类名和对象名应该是名词或者名词短语,如Cutomer,Account,避免使用Manager,Processor,Data或Info这样的类名,类名不应是动词。

2.10方法名

方法名应该是动词或动词短语,如postPayment,deletePage或Save.

2.11别扮可爱,毫无意义。

2.12每个概念对应一个词。

在同一堆代码中有Controller,Manager,drive,这会让人产生困惑。DeviceManager和Protocol-Controller之间有和区别?

2.13 别用双关语

add,与append.

该使用append的时候,为了满足其统一性。牵强变为Add,避免这样做。

2.14使用解决方法领域名称。

记住,只有程序员才会读你的代码。(Computer Science ,SC 谁懂?)哪个程序员不知道jobQueue的意思呢?

2.15 使用源自所涉领域的名称。

可以请教领域专家。

2.16添加有意义的语境。

例如,addrFirstName,addrLastName,addrState. 比没有Addr,好很多。

读代码的人知道这是地名相关信息。不加的话,怎么知道是关于什么信息?

更好的方法是创建Address类,包含其子成员。

2.17不需要添加无用的语境。

“加油站豪华版(Gas Station Deluxe)” 在每个类添加GSD就毫无意义。

Address是个好类名,customerAddress是个好实例。不可混用。

2.18最后的话。

有必要,可以修改重命名他人的代码(维护).

试试上面的规则,立竿见影。

 

 

 

posted @ 2013-11-05 22:52  chengdu.jack.li  阅读(277)  评论(1)    收藏  举报