概述
你有一段代码可以被组织在一起并独立出来。将这段代码放进一个独立的函数中,并让函数名称解释该函数的用途。
以后的笔记要多些自己的理解。而不单单是对文中内容的摘要。
动机
适用情况:主要是为了提高可理解性。1
)函数过长;
2
)需要注释才能够理解——这两种情况下可以考虑使用此重构手法。
目标:简短而又有良好命名的函数。
好处:1
)函数复用性好。
2
)高层函数更容易理解(就像读注释一样阅读代码。但是,前提是函数有良好的命名)。
3
)
覆写更容易(??什么意思,是否是继承的覆写)。
前提条件:函数要有良好的命名,否则,使用此重构手法的效果会打折扣。
如何决定函数的长度:没有标准。
关键在于函数名和函数本体间的语义距离
(好好理解一下)。如果提炼代码可以使函数更清晰,则,即便是函数名比代码长度还长,也无所谓。
作法
这个作法有一个比较困难的地方,就是对局部变量的处理。
1、
构造一个新函数,并且以这个函数的意图命名(以做什么命名,而非怎么做命名)。如果提炼代码能更好的昭示代码意图,即便是一行代码,或这有一个函数调用,你也要提炼它。但如果你没有良好的命名,则不宜轻举妄动。
2、
将源代码拷贝到目标函数,处理因为拷贝代码需要处理的变量。
3、
在原函数中用此目标函数代替。
4、
编译,测试。
局部变量(包括原函数的参数和原函数的临时变量)的处理方法:
1、
只读取其值,可以作为函数参数。
2、
对局部变量赋值:分两种情况:1
)只在被提炼码中使用,则整个提取出来。
2
)如果内外都用通到,则可以让新的函数返回其值。
3
)如果变量在原函数中被复制,则可以作为参数传递进去。
一个函数最好一个返回值。多个返回值可以设定多个函数。
如果临时变量时此重构无法进行,则可以先使用其他的重构手法减少临时变量。
分享到:
相关推荐
某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你一次一小步地修改你的代码,这就减少了过程中的风险。很快...
Martin Fowler和《重构:改善既有代码的设计...某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。点击进入该书更多详细信息。 ——《豆瓣读书》
某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你壹次壹小步地修改你的代码,这就减少了过程中的风险。很快...
6.1 ExtractMethod(提炼函数)110 6.2 InlineMethod(内联函数)117 6.3 InlineTemp(内联临时变量)119 6.4 ReplaceTempwithQuery(以查询取代临时变量)120 6.5 IntroduceExplainingVariable(引入解释性变量)...
某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你一次一小步地修改你的代码,这就减少了过程中的风险。很快...
某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你一次一小步地修改你的代码,这就减少了过程中的风险。很快...
6.1 ExtractMethod(提炼函数)110 6.2 InlineMethod(内联函数)117 6.3 InlineTemp(内联临时变量)119 6.4 ReplaceTempwithQuery(以查询取代临时变量)120 6.5 IntroduceExplainingVariable(引入解释性变量)...