《代码整洁之道》(四) ---格式

113 阅读4分钟

格式

选用一套管理代码格式的简单规则,并应用,能大幅度提高代码的可维护性

垂直方向上的格式

排版

关注整个源文件中代码的排版是很重要的,参考报纸的写法: 当我们从上到下阅读报纸时,头部有个大标题: 告诉我们故事主题,第一段是整个故事的大纲,给出粗略的主题内容,但是隐藏了细节,接着读下去细节渐次增加,直至我们完全了解所有内容,

源文件亦是如此: 首先文件名应该简单且一目了然,其次源文件中由上至下应该是: 由抽象层级较高的函数和他们之间的调用组成主要的逻辑线,然后是下一抽象层级的函数,其中的细节应该往下逐渐展开,直至找到源文件中最底层的函数和细节

适当的隔离

导入导出,变量声明,函数之间等都用空行隔开,这条空行会暗示读者空行隔开的是不同的概念

适当的紧凑

空行隔开各个概念,而相邻的代码则暗示了他们之间的紧密联系,所以紧密相关的代码应该相互靠近在一起.

垂直距离

对于哪些关系密切,放置在同一源文件中的概念,他们在书写的位置距离应该成为对彼此易懂度影响有多重要的标准,避免读者在源文件中跳来跳去.换句话说关系密切的概念之间的距离应该尽量小,

如何控制概念之间的垂直距离?下面是一些建议:

变量声明: 变量声明应该尽可能的靠近其使用的位置

实体变量: 实体变量应该在类的顶部声明

相关函数: 若某个函数调用了另外一个,就应该把他们放在一起,且调用者应该在被调用者的上面

概念相关: 上述讲的相关性都是建立在直接依赖的基础上,编写代码时也会出现其他的相关性: 操作相似的函数等这时,函数之间即使没有调用关系也应该放在你一起

垂直顺序

通常我们希望建立一种自顶向下贯穿源代码模块的信息流,自上向下展示函数调用顺序,使最重要的概念先出现,并且尽可能少的包含细节,最底层的细节最后出现

就如排版一节中说的: 由抽象层级高的函数组成逻辑线(信息流),这样我们就能扫一眼源代码文件,自最前面的几个函数获取主要信息,而不被细节所消耗精力

横向方向上的格式

一行代码应该多宽?

最好遵循无需拖动滚动条就能看到最右侧代码的原则,不要让一行代码超出了你的屏幕

适当的隔离/紧凑

虽然现在的编辑器会自动格式化代码,但Bob大叔的空格用法很妙:

使用空格来强调区隔关系: 如操作符两边,函数参数之间,

不使用空格来表示关系密切: 如函数名和圆括号.同时也可以用来强调优先级:

下面是一些伪代码例子:

const a = 1; //等号两边使用空格,强调两个要素: 左边和右边
function fn(a, b, c){} //函数名和后面的括号不加空格,用来强调这是一体的,而参数中使用空格强调每个参数都是独立的
b*b - 4*a //乘法优先级较高,所以乘号两边不使用空格间隔

缩进

使用缩进来代表层级和范围

团队风格

每个程序员都有自己喜欢的格式,但在团队中工作,就是团队说的算,和团队成员一起指定规则并遵守,记住,好的软件系统是一系列拥有一致风格的代码文件组成,不是一个或几个文件.让读者确信,他在一个源文件中看到的代码风格在其他文件也是适用的.