格式是特别重要的,如果没有好的格式,我们前面的努力就会事倍功半。我们在格式上应该做到:当有人查看底层代码时,他们会被代码整洁、一致及所感知到对细节的关注而震惊。
“让代码工作”固然重要,但是对于一个开发者来说格式的目的在于沟通,好的格式有利于开发者之间的沟通,而沟通是专业开发者的头等大事。
垂直格式
一般来讲,在垂直上我们希望自上向下展示函数调用依赖顺序。也就是说,被调用的函数应该放在执行调用的函数下面。这样就建立了一种自顶向下贯穿源代码模块的良好信息流。我们希望最重要的概念先出来,希望以包括最少细节的方式表述它们,希望底层细节最后出来。
《Clean Code》的作者总结了Junit、FitNesse、testNG等七个项目发现用大多数为200行、最多500行的单个文件可以构造出色的系统。尽管这个原则并不是不可违背,但是我还是乐于接受。因为短文件通常比长文件易于理解。
每组代码块都要完整表达一种思路、一个逻辑,不同的代码块要用空白行区隔开来。在封包声明、导入声明和每个函数之间,都有空白行隔开。
在垂直上靠近的代码行则暗示了它们之间的紧密关系,所以,紧密相关的代码应该互相靠近。
变量声明:变量声明应该尽可能靠近其使用位置;
实体变量:实体变量应该声明在顶部;
相关函数:若某个函数调用了另外一个,就应该把它们放在一起,而且调用者应该尽可能放在被调用者上面;
概念相关:概念相关的代码应该放在一起。相关性越强,彼此之间的距离就该越短。
横向格式
代码一行的长度应该在80个字符以内,但是这不是一个需要死守的界限,《Clean Code》的作者建议的上限是120个字符。
一行中用空格把紧密相关的隔开。
水平对齐:不要刻意去追求水平的对齐;
缩进:在一个代码文件中要使用行的缩进来区别不同代码块的层次。一般来说,大多数的类的声明,根本不用缩进。类中的方法相对该类缩进一个层级。方法的实现相对方法声明缩进一个层级。代码块的实现相对于其容器代码块缩进一个层级,以此类推。在编程时应尽最大的努力不要违反缩进规则。
团队规则
软件开发人员各有各的风格,但是同在一个团队里就应该协商一种统一的风格,并在平时编码时严格遵守。