第二十二章 代码重构
22.1 提炼函数
如果在函数中有一段代码可以被独立出来,那我们最好把这些代码放进另一个独立的函数中。好处:
- 避免出现超大函数。
- 独立出来的函数有助于代码复用。
- 独立出来的函数更容易被覆写。
- 独立出来的函数如果拥有一个良好的命名,它本身就起到了注释的作用。
22.2 合并重复的条件片段
如果一个函数体内有一些条件分支语句,而这些条件分支语句内部散布了一些重复的代码,就有必要进行合并去重工作。
22.3 把条件分支语句提炼成函数
复杂的条件分支语句是导致程序难以阅读和理解的重要原因,而且容易导致一个庞大的函数。把条件分支语句提炼成单独的函数,既能更准确表达代码的意思,函数名本身又能起到注释的作用。
22.4 合理使用循环
在函数体内,如果有些代码实际上负责的是一些重复性的工作,合理利用循环不仅可以完成同样的功能,还可以使代码量更少。
22.5 提前让函数退出代替嵌套条件分支
嵌套的条件分支语句相比平铺的在阅读和理解上更加困难。用《重构》里的话说,嵌套的条件分支往往是由一些深信“每个函数只能有一个出口”的程序员写出的。但实际上如果对函数的剩余部分不感兴趣,就应该立即退出。
1 | var del = function (obj) { |
22.6 传递对象代替过长的参数列表
参数的数量越多,函数就越难理解和使用。我们可以把参数都放入一个对象内,然后把该对象传入函数,函数需要的数据可以自行从该对象里获取。现在不用再关心参数的数量和顺序,只要保证参数对应的 key 值不变就可以了。
22.7 尽量减少参数数量
22.8 少用三目运算符
如果条件分支逻辑简单且清晰,这无碍我们使用三目运算符。
但如果条件分支逻辑非常复杂,最好的选择还是按部就班编写 if
、else
。
22.9 合理使用链式调用
在 JavaScript 中可以很容易实现方法的链式调用,即让方法调用结束后返回对象自身:
1 | var User = function () { |
或者:
1 | var User = { |
链式调用的坏处就是在调试的时候非常不方便。
如果该链条的结构相对稳定,后期不易发生修改,那么使用链式调用无可厚非。