代码整洁之道(二)
第二章,有意义的命名
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最后的话。
有必要,可以修改重命名他人的代码(维护).
试试上面的规则,立竿见影。

浙公网安备 33010602011771号