基于《重构》的代码重生之路
我们为什么要重构
你一定经历过,工作中,历史项目里面,一个函数几百行,变量命名不清晰,每每出现bug,用于修复bug的时间往往在看懂原开发者的意图之上。总之为了早点下班,为了更美好的生活。我们有必要写出清晰,优雅的代码,让我们自己开心,也让以后的开发者不在心中暗骂我们。
编写思路
本文主要以《重构》第二版为参照,基于现实开发中的实际问题进行解析,并加入部分实际开发代码(伪代码)进行描述,希望读者看完这篇文章,能够有所收获。
1. 提炼函数(Extract Function)
提炼函数,顾名思义就是将我们的代码块以函数的形式进行存放,这种方式最大好处就是避免过长的代码,同时良好的函数命名也可以让读者知道这部分代码的用意。那么我们如何判断是否需要提炼函数呢,《重构》作者提出的观点是,如果你需要花时间浏览一段代码才能弄清它到底在干什么,那么就应该将其提炼到一个函数中,并根据它要做的事情为其命名。(往往花了很多时间还是不能很好的理解代码的意图,那就是代码的坏味道),下面是实际的做法:
- 创造一个函数,根据函数的用途对其命名。
- 将待提炼的代码复制到新建的目标函数中。
- 仔细检查提炼代码,是否错在变量作用域问题,或者值的修改的问题,防止作用域污染。
- 处理有问题的变量,自测, 完成提炼。
举个例子:
1. 聚合逻辑相关代码,进行整合,防止同一逻辑代码相距过远。
function test () { let a = 1; console.log('111111') console.log(a); } // 实际调用a的时候在1111下面,虽然不影响代码执行,但是推荐如下操作 function test () { console.log('111111') let a = 1; console.log(a); }
// 聚拢代码之后,就可以将逻辑相近的代码提炼出来
function consoleA () {
let a = 1;
console.log(a);
}
----------------