读《代码整洁之道》第二章随笔 有意义的命名
让人引起重视的代码,名副其实
有意义的命名
如果你在给变量、函数或类命名的时候非常随意,如下:
1.1
int d; //elapsed time in days;消逝的时间 //又或者是 List list1 = ... List list2 = ...
当别人第一次看到此代码时并不知道它要干什么, 命名d ,并没有体现出来任何意义。
修改为如下命名:
1.2
int elapsedTimeInDays; //一天中消逝的时间 int daysSinceCreation; //创建天数
提高代码的清晰度,而不至于像上面的代码一样模糊。
有意义的区分
如下,字母o 与 0, 字母l 与 1。
1.3
int a = l; if(o == l) a = o1; else l = 01;
又或者,1.. 3...,如下
1.4
public static void copyChars(char a1[], char a2[]){ //TODO... }
重构1.4的代码,如果是JDK源码的话,它会这么写
1.5
public static void copyChars(char source[], char destination[]){ //TODO... }
资源-》目的地。
禁止用或者最好不用缩写
其实有时候开发为了图方便,或多或少都会缩写的。但本书不建议这么做。
举例:
1.6
Date genymdhms; //生成时间戳 Date modymdhms; //修改时间戳
重构后
Date generationTimeStamp;
Date modificationTimeStamp;
禁止或者最好不要用前缀后缀
用前缀确实没有什么大的意义,因为程序员在读命名时都是忽略前缀或者后缀的。
类名命名的规则
类名和对象一般用名词或者名词短语命名。
方法名
一般用动词或者动词短语命名。
根据JavaBean的标准,在一个类中一般有三种动词
- get
- set
- is
举例
1.7
String name = employee.getName(); customer.setName("mike"); if(paycheck.isPosted)....
小结
本书所在意的命名长短不是命名的长度,而是它够不够干净利落。
再看一组对比
1.8
//打印猜测统计 private void printGuessStatistics(char candidate, int count){ String number; String verb; String pluralModifier; //修饰词 if(count == 0){ number = "no"; verb = "are"; pluralModifier = "s"; }else if(count == 1){ .... }else { .... } String guessMessge = String.formate(....) print(guessMessage); }
在一个方法里,变量贯彻始终。本书建议对其进行分解,重构如下
public Class GuessStatisticMessage { private String number; private String verb; private String pluralModifier; public String make(char candidate, int count){ createPluralDependetMessageParts(count); return String.format( "......" ) } public void createPluralDependetMessageParts(int count){ if(count == 0){ thereAreNoLetters(); }else if(count == 1){ thereOneLetters(); }else{ thereAreManyLetters(count); } } public void thereAreNoLetters(){ //TODO... } public void thereOneLetters(){ //TODO... } public void thereAreManyLetters(count){ //TODO... } }
刚开始会很疑惑,我直接if else 不行吗? 一目了然。
但是看了重构后的代码会发现,它的步骤太紧凑了,而且分工明确! 函数变化从上到下,看的很舒服。
本文来自博客园,作者:无上仰无,转载请注明原文链接:https://www.cnblogs.com/sharey/p/14970698.html

浙公网安备 33010602011771号