6.1 extract method

本文阐述了通过减少函数粒度来提高代码复用性、增强函数可读性及简化代码维护的方法。具体步骤包括创建符合函数意图的新函数、提炼并复制关键代码片段、检查和优化变量引用、调整变量声明位置、以及最终重构和测试代码。文章还提供了无局部变量、有局部变量及局部变量再赋值情况下的实例分析。

动机:

首先,如果每个函数的粒度都很小,那么函数被复用的机会就更大。

其次,这会使高层函数读起来就像一系列注释。

再次,如果函数都是细粒度,那么函数的覆写也会更容易些。

做法:

创造一个新函数,根据这个函数的意图来对它命名。

将提炼出的代码从源函数复制到新建的目标函数中。

仔细检查提炼出的代码,看看其中是否引用了“作用域限于源函数”的变量

检查是否有“仅用于被提炼代码段”的临时变量。如果有,在目标函数中将它们声明为临时变量。

检查被提炼代码段,看看是否有任何局部变量的值被它改变。如果一个临时变量值被修改了,看看是否可以将被提炼代码段处理为一个查询,并将结果赋值给相关变量。如果很难这样做,或如果被修改的变量不止一个,你就不能仅仅将这段代码原封不动地提炼出来。你可能需要先使用split temporary variable,然后再尝试提炼。也可以使用replace temp with query将临时变量消灭掉。

将被提炼代码段中需要读取的局部变量,当作参数传给目标函数。

处理完所有局部变量之后,进行编译。

在源函数中,将被提炼代码段替换为对目标函数的调用。

 

范例:无局部变量

范例:有局部变量

范例:对局部变量再赋值

被复制的临时变量也分为两种情况:

1.这个变量只在被提炼代码段中使用。可以将这个临时变量的声明移到被提炼代码段中,然后一起提炼出去。

2.被提炼代码段之外的代码也使用了这个变量。如果这个变量在被提炼代码段之后未再被使用,只需要直接在目标中修改它就可以了;如果被提炼代码段之后的代码还使用了这个变量,需要让目标函数返回该变量改变后的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值