6.1 extract method

来源:互联网 发布:淄博seo诊断公司 编辑:程序博客网 时间:2024/05/16 09:08

动机:

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

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

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

做法:

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

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

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

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

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

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

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

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

 

范例:无局部变量

范例:有局部变量

范例:对局部变量再赋值

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

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

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

原创粉丝点击