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

  • 相关阅读:
    CentOS如何查看端口是被哪个应用/进程占用
    VS2010自带的性能分析工具分析.NET程序的性能
    Centos7安装RocketMQ及配置测试
    tbnet编译
    jquery动态生成html代码 怎么 获取id 或 class
    jQuery1.9+中删除了live以后的替代方法
    自定义jQuery插件Step by Step
    jQuery插件开发的两种方法及$.fn.extend的详解
    Informix 配置选项
    Informix ConnetionString Pool Size
  • 原文地址:https://www.cnblogs.com/pony1223/p/7523486.html
Copyright © 2011-2022 走看看