动机:
首先,如果每个函数的粒度都很小,那么函数被复用的机会就更大。
其次,这会使高层函数读起来就像一系列注释。
再次,如果函数都是细粒度,那么函数的覆写也会更容易些。
做法:
创造一个新函数,根据这个函数的意图来对它命名。
将提炼出的代码从源函数复制到新建的目标函数中。
仔细检查提炼出的代码,看看其中是否引用了“作用域限于源函数”的变量
检查是否有“仅用于被提炼代码段”的临时变量。如果有,在目标函数中将它们声明为临时变量。
检查被提炼代码段,看看是否有任何局部变量的值被它改变。如果一个临时变量值被修改了,看看是否可以将被提炼代码段处理为一个查询,并将结果赋值给相关变量。如果很难这样做,或如果被修改的变量不止一个,你就不能仅仅将这段代码原封不动地提炼出来。你可能需要先使用split temporary variable,然后再尝试提炼。也可以使用replace temp with query将临时变量消灭掉。
将被提炼代码段中需要读取的局部变量,当作参数传给目标函数。
处理完所有局部变量之后,进行编译。
在源函数中,将被提炼代码段替换为对目标函数的调用。
范例:无局部变量
略
范例:有局部变量
略
范例:对局部变量再赋值
被复制的临时变量也分为两种情况:
1.这个变量只在被提炼代码段中使用。可以将这个临时变量的声明移到被提炼代码段中,然后一起提炼出去。
2.被提炼代码段之外的代码也使用了这个变量。如果这个变量在被提炼代码段之后未再被使用,只需要直接在目标中修改它就可以了;如果被提炼代码段之后的代码还使用了这个变量,需要让目标函数返回该变量改变后的值。
本文阐述了通过减少函数粒度来提高代码复用性、增强函数可读性及简化代码维护的方法。具体步骤包括创建符合函数意图的新函数、提炼并复制关键代码片段、检查和优化变量引用、调整变量声明位置、以及最终重构和测试代码。文章还提供了无局部变量、有局部变量及局部变量再赋值情况下的实例分析。

373

被折叠的 条评论
为什么被折叠?



