重构之重新组织函数

看重构这本书中重新组织函数章节的摘录:

方法一:Extract Method(提炼函数)
如果有一段代码可以被组织在一起并独立出来,将这段代码放进一个独立函数中,并让函数名称解释该函数的用途。
简短而命名良好的小函数优点:
1,如果每个函数的粒度都很小,那么函数被复用的机会变大;
2,这会使高层函数读起来就像一系列注释
3,如果函数是细粒度,那么函数的覆也更容易
函数命名很重要,创造一个新函数,根据这个函数的意图来对它命名(以它“做什么”来命名而不是“怎么做”来命名)。

方法二:Inline Method (内联函数)
一个函数的本体与名称同样清楚易懂。
在函数调用点插入函数本体,然后移除该函数。
动机:对于内部代码和函数名称同样清晰易懂的函数可以使用内联函数,减少不必要的间接性;对于一群组织不甚合理的函数,可以将它们内联到一个大型函数中,再从中提炼出组织合理的小型函数。
注意检查函数。确定它不具有多态性。

方法三:Inline Temp(内联临时变量)
若有一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构手法,将所有对该变量的引用动作,替换为对它赋值的那个表达式本身。
动机:
Inline Temp多半是作为Replace Temp with Query的一部分使用的;唯一单独使用的inline temp的情况是发现某个临时变量被赋予某个函数调用的返回值。I

方法四:Replace Temp with Query(以查询取代临时变量)
程序以一个临时变量保存某一表达式的运算结果,将这个表达式提炼到一个独立函数中。将这个临时你,变量的所有引用点替换为对新函数的调用。此后,新函数还可被其他函数使用。
动机:
临时变量的问题在于只能在所属函数内使用,会驱使你写出更长的函数,因为这样才能访问到所需眼的临时变量。如果把临时变量替换为一个查询,那么同一个类中所有的函数都将可以获得这份信息。

方法五:Introduce Explaining Variable(引入解释性变量)
有一个复杂的表达式,将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途。
表达式有可能非常复杂而难以阅读,这种情况下,临时变量可以帮助你将表达式分解为比较容易管理的形式。(有时也可以用extract method处理),但处理的是拥有大量局部变量的算法就倾向使用introduce explaining variable.

方法六:Split Temporary Variable(分解临时变量)
程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果;针对每次赋值,创造一个独立、对应的临时变量。
动机:同一个临时变量承担两件不同的事情,会令代码阅读者糊涂。每个变量应该只承担一个责任。

方法七:Remove Assignments to Parameters(移除对参数的赋值)
代码对一个参数进行赋值,以一个临时变量取代该参数的位置。
动机:对参数赋值降低了代码的清晰度,而且混用了按值传递和按引用传递这两种参数传递方式。

方法八:Replace Method with Method Object(以函数对象取代函数)
有一个大型函数,其中对局部变量的使用使你无法采用extract method,将这个函数放进一个单独对象中,如此一来局部变量就变成了对象内的字段。然后你可以在同一个对象中将这个大型函数分解为多个小型函数。
动机:将原本的大型函数拆解变短。

方法九:Substitute Algorithm(替换算法)
想要把某个算法替换为另一个更清晰的算法,将函数本体替换为另一个算法。
动机:随着对问题有了更多理解,往往会发现有更简单的算法,此时你就需要改变原来的算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值