重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)

Posted 屌丝码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)相关的知识,希望对你有一定的参考价值。

  发现:你有一个复杂的表达式。

  解决:将该复杂的表达式(或其中的部分)的结果放进一个临时变量,并以此变量名称来解释表达式用途。

//重构前  
if((platform.toUpperCase().indexOf("MAC") > -1) &&  
    (browser.toUpperCase().indexOf("IE") > -1) &&  
    wasInitialized() && resize > 0)  
{  
    //do something  
}  
//重构后  
final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;  
final boolean isIEBrowser = browser.toUpperCase().indexOf("IE") > -1;  
final boolean wasResize = resize > 0;  
  
if(isMacOs && isIEBrowser && wasInitialized() && wasResize){  
    //do something  
}  

动机:表达式有可能非常复杂而难以阅读。这种情况下,临时变量可以帮助你将表达式分解为比较容易管理的形式。

         在条件逻辑中,Introduce Explaining Variable (引入解释性变量)是一个很常见的手法,但是最好尽量使用 Extract Method (提炼函数)来解释一段代码的意义。毕竟临时变量只在他所处的那个函数才有意义,局限性较大。函数则可以在对象的这个生命中都有用,并且可被其他对象使用。但有时候,当局部变量使Extract Method (提炼函数)难以进行时,就可以使用Introduce Explaining Variable (引入解释性变量).

做法:1、声明final临时变量,将待分解的复杂表达式中的一部分动作的运算结果赋值给他。

         2、将表达式中的“运算结果”这一部分,替换为上述临时变量。如果被替换的这一部分在代码中重复出现,你可以一次一个,逐次替换。

         3、编译、测试

         4、重复上述过程,处理表达式的其他部分。

 

总结:这种一般很少用,一般就用于比较复杂的语句计算的时候,定义一个临时变量,因为这个时候采用内联可能会显得太长了,反而不好看,所以就定义一个有意义的临时变量,并将变量声明为final

以上是关于重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)的主要内容,如果未能解决你的问题,请参考以下文章

重构·改善既有代码的设计.03之重构手法(上)

重构改善既有代码设计--重构手法01:Extract Method (提炼函数)

重构改善既有代码设计--重构手法09:Substitute Algorithm (替换算法)

重构改善既有代码设计--重构手法 之重新组织你的函数总结

重构改善既有代码设计--重构手法06:Split Temporary Variable (分解临时变量)

重构改善既有代码设计--重构手法18:Self Encapsulate Field (自封装字段)