zoukankan      html  css  js  c++  java
  • 重构改善既有代码设计--重构手法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

  • 相关阅读:
    Static Fields and Methods
    usermod
    理解Java的Class类、"this."关键字、Constructor构造器(一)
    [REPRINT] Java 101: Classes and objects in Java
    第六章 Java并发容器和框架
    第五章 Java中锁
    第四章 Java并发编程基础
    第三章 Java内存模型(下)
    第三章 Java内存模型(上)
    第二章 并发机制的底层实现原理
  • 原文地址:https://www.cnblogs.com/pony1223/p/7523486.html
Copyright © 2011-2022 走看看