代码整洁之道
本书给出了很多实用的建议和准则,值得细读并付诸实践。
聪明程序员和专业程序员之间的区别在于,专业程序员了解,明确是王道。专业程序员善用其能,编写其他人能理解的代码。
函数
函数的第一规则是要短小。第二条规则是还要更短小。
函数的缩进层级不该多于一层或两层,这样易于阅读和理解。
函数应该只做一件事,做好这件事。只做着一件事。
别害怕长名称,长而具有描述性的名称,比短而令人费解的名称好。长而具有描述性的名称,要比描述性的长注释好。
注释
注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。注意,我用了“失败”一词。我是说真的。注释总是一种失败。我们总无法找到不用注释就能表达自我的方法,所以总要有注释,这并不值得庆贺。
我们已经拥有优良的源代码控制系统如此之久,这些系统可以为我们记住不要的代码。我们无需再用注释来标记,删掉即可,它们丢不了。
格式
在封包声明、导入声明和每个函数之间,都有空白行隔开。这条极其简单的规则极大地影响到代码的视觉外观。每个空白行都是一条线索,标识出新的独立概念。往下读代码时,你的目光总会停留于空白行之后那一行。
如果说空白行隔开了概念,靠近的代码行则暗示了它们之间的紧密关系。所以,紧密相关的代码应该互相靠近。
对象和数据结构
对象把数据隐藏于抽象之后,曝露操作数据的函数。数据结构曝露其数据,没有提供有意义的函数。
过程式代码(使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数。面向对象代码便于在不改动既有函数的前提下添加新类。 反过来讲也说得通: 过程式代码难以添加新数据结构,因为必须修改所有函数。面向对象代码难以添加新函数,因为必须修改所有类。
测试
F.I.R.S.T
快速(Fast) 测试应该够快。测试应该能快速运行。
独立(Independent) 测试应该相互独立。
可重复(Repeatable) 测试应当可在任何环境中重复通过。
自足验证(Self-Validating) 测试应该有布尔值输出。
及时(Timely) 测试应及时编写。
类
遵循标准的 Java 约定,类应该从一组变量列表开始。如果有公共静态常量,应该先出现。然后是私有静态变量,以及私有实体变量。很少会有公共变量。 公共函数应跟在变量列表之后。我们喜欢把由某个公共函数调用的私有工具函数紧随在该公共函数后面。这符合了自顶向下原则,让程序读起来就像一篇报纸文章。
类的名称应当描述其权责。实际上,命名正是帮助判断类的长度的第一个手段。如果无法为某个类命以精确的名称,这个类大概就太长了。
系统应该由许多短小的类而不是少量巨大的类组成。每个小类封装一个权责,只有一个修改的原因,并与少数其他类一起协同达成期望的系统行为。
类应该只有少量实体变量。类中的每个方法都应该操作一个或多个这种变量。