Chapter One 整洁代码
良好整洁的代码可以提高团队的工作效率,甚至可以决定一款软件,一家公司的未来,良好的代码应该包括:
* 能够通过所有的测试;
* 没有重复代码;
* 体现系统中的全部设计理念;
* 包括尽量少的实体,比如类,方法,函数等;
* 让编程语言看起来专为解决某个问题而存在;
如果一段代码反复出现,就表示某种想法未在代码中得到良好的体现。——Ron Jeffries
时时刻刻保持代码整洁
Chapter Two 命名
名副其实
代码的明确度很重要,它应该使阅读代码的人清楚每一个命名的意义。请参考以下代码:
/*假设这是一个扫雷游戏*/
public List<int[]> getThem()
{
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}
很显然,从以上的代码,我们无法理解这些问题:
1. theList是什么类型的东西?
2. theList零下标的目的意义是什么?
3. 值4的意义是什么?
4. 我怎么使用返回的列表?
上述代码就是明确度不高的典型
把它改成如下的代码:
/*假设这是一个扫雷游戏,假设新建一个类,包含isFragged这个函数*/
public List<Cell> getFlaggedCells
{
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cells : gameBorad)
{
if (cell.Flagged())
flaggedCells.add(cells);
}
return flaggedCells;
}
代码相比于之前变得明确多了,现在我们可以回答上面的问题了:
1. 游戏的盘面。
2. 一种状态值。
3. 表示已标记的一种状态。
避免误导
程序员应当避免使用与本意相悖的词,如:
* hp,aix,sco是UNIX平台的专有名称,arch,d*是LINUX平台专有名称,不应当用作变量名。
* 如果一个容器不是List类型,为它命名时不需要加上List。
* 提防使用不同之处较小的名称,XYZControllerForEfficientHandingOfStrings和XYZControllerForEfficientStorageOfStrings实在是难以区分。
* 不要用O 0 1 l来作为变量名。
做有意义的区分
命名要区分的有意义,以下是一些没有意义的区分:
数字系列
public static void copyChars(char a1[], char a2[])
{
for (int i = 0; i < a1.length; i++)
{
a2[i] = a1[i];
}
}
参数名改成source和destination的话,这段代码的可读性大大提高。
废话系列
所有的废话都是冗杂
使用a,the要来用作有效的区分,zork变量和thezork变量同时存在的话,麻烦就来了。
Variable(变化的,可变的;)一词永远不应该出现在变量名中,Table永远不该出现在表名中。
缺少明确的定义,变量moneyAmount和money没区别,theMessage和message也没区别,Product类,ProductData类,ProductInfo类,意思有何区别?
使用可以读的名称
命名应当避免自造词,错词,乱七八糟的词。
”诶,小张啊,这个鼻涕阿三喜恩替(BCR3NT)的函数里,有个皮埃斯黛不留爱去(PSWH)变量,看见没?“
”。。。。。。。“
使用容易搜索的名称
单字母名称或者数字常量有一个极大的问题就是很难去寻找。
单字母应该仅用于短方法的中的本地变量。名称长短应与其作用域大小相对应。一个量被使用的次数越多,就越应当赋予其易搜索的名字。
避免使用编码
匈牙利语标记法
时代的眼泪
成员前缀
public class part
{
private String m_dsc;
void setName(String name)
{
m_dsc = name;
}
};
---------------------------------------------------------------------------------------
public class part
{
String description;
void setDescription(String description)
{
this.description = description;
}
};
人们代码读的越多,越会忽视前缀,于是这也是时代的眼泪。
(但是我个人目前读到的代码中大部分仍然含前缀。。。。。。)
避免思维定势
明确是王道,不要想当然!阅读代码的人会把你的名称翻译成他们熟知的名称,而无法理解你的真正意思。
类名与方法名
类名应该是名词或者名词短语,类名不应该是动词。
方法名应该是动词或者动词短语。
其他
不要用俚语
每个概念对应一个词
别用双关语
使用解决方案领域名称
使用源自所涉问题领域的名称
添加有意义的语境
(这里作者说可以使用前缀来区分,这貌似和前面冲突了)
(。。。。看了别人的笔记。。。相比之下我写得太多了。。。以后的章节要好好精简一下。)
函数
待续