起因
最近在看 Clean Code(《代码整洁之道》),在看到第五章 格式的时候刚好注意到一个之前一直比较困惑的点——方法/函数的书写顺序。
于是,就准备记录一下。
垂直方向上的靠近
在写代码时,我们习惯将其分成一个个不同的方法/函数,一方面是对不同层次的代码及其含义做抽象,另一方面是这样有助于提高代码的可维护性。说白了,这也都是一个个前辈们总结出的经验,而这也是我想要从 Clean Code 中学习的。
针对不同的方法/函数,必然存在互相调用的现象,那么,这些方法/函数应该按照怎样的顺序来书写呢?
Clean Code给出的建议是紧密相关的代码应该互相靠近!
这样做有什么好处呢?
更易于阅读,一览无遗,不必更多地移动头部和眼球!
例:
function printCurrentMonth() {
const month = getCurrentMonth();
console.log(`现在是 ${month} 月份`);
}
function getCurrentMonth() {
return new Date().getMonth() + 1;
}
垂直顺序
那么,是不是我们只需要尽量将相关的代码放的靠近就可以了呢?当然不是!
推荐的做法是自上向下展示函数调用依赖顺序。也就是说,被调用的函数应该放在执行调用的函数下面。
如下:
function A() {
B();
C();
}
function B() {
console.log("这是 B");
}
function C() {
console.log("这是 C");
}
function D() {
E();
}
function E() {
console.log("这是 E");
}
多级调用的垂直顺序
虽然之前写代码大部分也都是这么写的,但是并没有特别遵循,而且对其原因也不是很清楚,而在看了 Clean Code 的这部分内容后,也确实明白了这么写的好处!
但是,确实有一个问题的答案,Clean Code 并没有明确的指出来,那就是如果有函数存在多级调用的现象,那么顺序应该是怎样的呢?
如下:
function A() {
B();
C();
}
function B() {
D();
}
针对上面这段代码,我到底应该在 B
下面先写 C
呢还是先写 D
呢?
于是,我在 Clean Code 里翻找了一下,找了一些作者正确的例子,找到了这个答案:先写 D
。
如下:
function A() {
B();
C();
}
function B() {
D();
}
function D() {
console.log("这是 D");
}
function C() {
console.log("这是 C");
}
总结
- 紧密相关的代码应该互相靠近
- 自上向下展示函数调用依赖顺序,被调用的函数应该放在执行调用的函数下面
- 如果存在多级调用的情况,优先展示单个被调用的函数的所有细节