重构手法--重新组织函数

重新组织函数

1、提炼函数:将相关代码提取或者将长函数分解

    无局部变量:直接提取,命名函数

    局部变量值:

        提炼代码处只是初始化:可以放到提炼函数中初始化

        提炼代码处进行了特定条件的赋值:以函数传参的形式传入提炼函数中

    有局部变量:

        不修改局部变量:直接提取

        对局部变量赋值:

            局部变量作用域只在提炼代码中:直接放入提炼代码中

            局部变量作用域不仅仅在提炼代码中:作为提炼函数的返回值返回

    如果需要返回多个值:那就拆分成多个函数,每个函数返回一个值

2、将函数内联化

函数名和函数体同样通俗易懂:去掉函数,直接使用函数体代码到调用处,没必要多此一举,间接性可能带来帮助,但非必要的间接性总是让人不舒服有一群组织不甚合理的函数:可以将它们都inline到一个大型函数中,再从中提炼出组织合理的小型函数

3、将临时变量内联化

临时变量只被一个简单表达式赋值一次,将所有对该变量的引用动作,替换为对它赋值的那个表达式本身

某个临时变量被赋予某个函数调用的返回值

4、以查询取代临时变量

某个临时变量被赋值超过一次,考虑使用Split Temporary Variable 将它分割成多个变量:程序以一个临时变量(temp)保存某一表达式的运算结果:将这个表达式提炼到一个独立函数中。将这个临时变量的所有「被引用点」替换为「对新函数的调用」。

5、引入解释型变量

复杂的表达式:将该表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途。

在条件逻辑(conditional logic )中,Introduce Explaining Variable特别有价值:你可以用这项重构将每个条件子句提炼出来,以一个良好命名的临时变量来解释对应条件子句的意义。使用这项重构的另一种情况是,在较长算法中,可以运用临时变量来解释每一步运算的意义

Introduce Explaining Variable是一个很常见的重构手法,但我得承认,我并不常用它。我几乎总是尽量使用 Extract Method 来解释一段代码的意义。毕竟临时变量只在它所处的那个函数中才有意义,局限性较大,函数则可以在对象的整个生命中都有用,并且可被其他对象使用。但有时候,当局部变量使 Extract Method 难以进行时,我就使用Introduce Explaining Variable。

6、剖解临时变量

某个临时变量被赋值超过一次:针对每次赋值,创造一个独立的、对应的临时变量,循环变量或者类似求和汇总这些除外

如果临时变量赋值超过一次,就意味它们在函数中承担了一个以上的责任。如果临时变量承担多个责任,它就应该被替换(剖 解)为多个临时变量,每个变量只承担一个责任。同一个临时变量承担两件不同的 事情,会令代码阅读者糊涂。

7、移除对参数的赋值操作

对一个参数进行赋值动作:以一个临时变量取代该参数的位置。

8、以函数对象取代函数

一个大型函数,其中对局部变量的使用,比如这些局部变量之间存在相互引用,使你无法釆用 Extract Method。

将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field) 然后你可以在同一个对象中将这个大型函数分解为数个小型函数。

9、替换你的算法

把某个算法替换为另一个更清晰的算法:做一件事可以有更清晰的方式,就应该以较清晰的方式取代复杂方式

你可能感兴趣的:(重构手法--重新组织函数)