6.5 Introduce Explaining Variable(引入解释性变量)

概括
        你有一个复杂的表达式。
         将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名来解释表达式用途。
      例子
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)在较长算法中,可以运用临时变量来解释每一步运算的意义。
        
        重构的作者并不常用这种手法,他总是尽量使用Extract Method来解释一段代码的意义。原因:因为临时变量只在它所处的那个函数才有意义,局限性较大,而函数可以在对象的真个生命周期都有用,并且可被其他对象使用。有时候当局部变量使用Extract Method难以进行时,重构的作者才使用本重构手法。
做法
.
实践
      重构作者更喜欢用Extract Method。一开始会把这些新函数声明为private,如果其他对象也需要,可以很容易的改变这些函数的访问限制。且Extract Method的工作量通常并不比Introduce Explaining Variable来的大。

     何时使用本重构手法:  在Extract Method需要花费更大工作量时。

你可能感兴趣的:(重构)