概括
你有一个复杂的表达式。
将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名来解释表达式用途。
将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名来解释表达式用途。
例子
if((platform.toUperCase().indexOf( "MAC") > - 1) &&
(browser.toUperCase().indexOf( "IE") > - 1) &&
wasInitialized() && resize > 0
){
//do something
}
重构后
final boolean isMacOs = platform.toUperCase().indexOf( "MAC") > - 1;
final boolean isIEBrowser = (browser.toUperCase().indexOf( "IE") > - 1;
final boolean wasResized = resize > 0 ;
if(isMacOs && isIEBrowser && wasInitialized() && wasResized){
//do something
}
表达式可能非常复杂而难以阅读,此时,临时变量可以帮你讲表达式分解为较容易管理的形式。
使用情况:
(1)条件逻辑中,你可以用这项重构将每个条件子句提炼出来,以一个良好命名的临时变量来解释对应条件子句的意义。
(2)在较长算法中,可以运用临时变量来解释每一步运算的意义。
(1)条件逻辑中,你可以用这项重构将每个条件子句提炼出来,以一个良好命名的临时变量来解释对应条件子句的意义。
(2)在较长算法中,可以运用临时变量来解释每一步运算的意义。
重构的作者并不常用这种手法,他总是尽量使用Extract Method来解释一段代码的意义。原因:因为临时变量只在它所处的那个函数才有意义,局限性较大,而函数可以在对象的真个生命周期都有用,并且可被其他对象使用。有时候当局部变量使用Extract Method难以进行时,重构的作者才使用本重构手法。
做法
.
实践
重构作者更喜欢用Extract Method。一开始会把这些新函数声明为private,如果其他对象也需要,可以很容易的改变这些函数的访问限制。且Extract Method的工作量通常并不比Introduce Explaining Variable来的大。
何时使用本重构手法:
在Extract Method需要花费更大工作量时。