重构手法列表——重新组织函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q1052196521/article/details/86647027

提炼函数(Extract Method)

现象:有一段代码可以被组织在一起并独立出来
重构动机:粒度小的函数,复用性比较高;会使得高层函数看起来就像注释一样;细粒度的函数,复写起来比较容易
做法:根据函数的意图来命名新的函数,重点在于能否取出一个有意义的名字。

内联函数(Inline Method)

现象:一个函数的本体与名称同样清楚易懂
重构动机:非必要的间接性会带来非必要的复杂度
做法:在函数调用点插入函数本体,然后移除该函数

内联临时变量(Inline Temp)

现象:一个临时变量只被一个简单表达式赋值一次,而它妨碍了其他重构手法
重构动机:动机不强烈,妨碍了其他重构手法时需要内联
做法:将所有对该变量的引用动作,替换为对它赋值的那个表达式本身

以查询取代临时变量(Replace Temp with Query)

现象:程序以一个临时变量保存保存某一表达式的运算结果
重构动机:当这个临时变量需要被方法外的其他地方使用到。
做法:将这个表达式提炼到一个独立函数中,将这个临时变量的所有引用点替换为对新函数的调用,此后新函数就可以被其他函数使用

引入解释性变量(Introduce Explaining Variable)

现象:有一个复杂的表达式
重构动机:表达式有时会非常复杂且难以阅读,比如一个很长很长的if条件判断
做法:将这个复杂表达式(或是其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途

分解临时变量(Split Temporary Variable)

现象:某个临时变量被赋值超过一次,它既不是循环变量也不被用于收集计算结果
重构动机:一个临时变量超过一次赋值(不计算结果,不为循环变量)意味着承担了多个职责,会令代码阅读者糊涂。
做法:针对每次赋值,创造一个独立,对应的临时变量

移除对参数的赋值(Remove Assignments Parameters)

现象:代码对一个参数进行赋值(只针对对象引用变化的情况)
重构动机:降低代码清晰度
做法:以一个临时变量取代该参数的位置

以函数对象取代函数(Replace Method with Method Object)

现象:对于一个大型函数,其中对局部变量的使用使得无法采用提炼函数
重构动机:函数篇幅过大,且因为存在过多临时变量导致无法提炼函数
做法:将这个函数放进一个单独对象中,如此一来局部变量就成为对象内的字段。然后可以在同一个对象中将这个大型函数分解为多个小型函数

替换算法(Substitute Algorithm)

现象:需要把某个算法替换为另一个更清晰的算法
重构动机:发现有更优的算法
做法:将函数本体替换为另一个算法

猜你喜欢

转载自blog.csdn.net/q1052196521/article/details/86647027