前言
好代码不是一次写成的, 任何人写的任何代码都有bug. 所以对代码的不停重构就是必须的. 如果不对代码进行重构那么随着体量的增大, 根本不能维护.(www.hedaoshe.com)
既然要重构那么就要遵循一系列手法, 下面我们先来讨论重构手法中运用最多的重新组织函数
中的提炼函数
每个提炼手法我都会以英文解释+数字标注的形式
提炼函数
几乎所有的问题根源都来自过长的函数, 因为它们包含了太多的信息, 这些信息又被函数错综复杂的逻辑掩盖, 不易鉴别. 对付过长的函数, 一项最有效的手法是提炼函数(110 Extract Methods), 就是把复杂函数的内部分解为多个函数. 但是非常重要的是关于新函数的名命. 应该可以通过对新函数命名直接解释新函数的用途.
提炼中
这种方法的难点在于处理局部变量, 其中又分为临时变量和参数.
关于临时变量的重构
- 对于过多的临时变量, 可以使用把临时变量替换成一个查询函数的手法, 也就是(120 Replace Temp with Query).
- 如果很多地方使用了某个临时变量, 我们应该先运用切割临时变量的手法 (128 Split Temporary Variable).
- 如果临时变量过于混乱, 那就直接把方法变成一个对象 (135 Replace with Method Object). 这是最终解决方案.
关于参数的重构
参数带来的问题要少一点, 但前提是你不能把应该当作参数的值在函数内赋值, 如果你这么做了, 就应当把函数内的赋值放回传参中 (131 Remove Assignments to Parameters).
提炼后
函数分解完毕后, 我们可能会发现能改进的算法, 这时候就可能要更换算法 (139 Substitute Algorithm).
提炼意义
- 提炼后, 函数的粒度很小, 复用的机会更大.
- 这会使函数名本身就是注释, 更方便理解.
- 因为粒度小, 所以对函数的覆写也很容易.
总结
过长的函数不利于维护, 所以提炼函数是非常重要重构手法, 而提炼的难点在于局部变量
.