『重构--改善既有代码的设计』读书笔记----Spli

系统 1503 0

继续开始我们重构手法的系列,今天介绍的是Split Temporary Variable---分解临时变量。

在我们平常写的程序中肯定有某些临时变量被赋予了超过一个的责任。如果他们不是那种收集结果(temp = temp + QString("abc"))或者循环变量(i = i + 1),然而他们却被赋值了 多于 一次。那么我们肯定说,这个变量被赋予了超过一个的责任,别看这是个小小问题,但这会阻扰我们阅读者的判断,我们会去揣测,这个变量到底是用来干嘛的。从而影响我们看清程序正常的思路。

因此,我们需要针对每次赋值,创造一个独立,对应的临时变量。

做法:1) 在需要分解临时变量的地方的声明和他第一次被使用的地方,修改他的名称。

           2) 将临时变量改完名称之后声明为const

           3) 在第二次赋值的地方重新声明那个临时变量

           4) 编译测试

           5) 重复上述过程,每次都在声明处做到改名,并修改在 下次 赋值之前的引用点。

例子:

      
        double
      
      
         getCost() 

{

    
      
      
        double
      
      
         res;



    
      
      
        double
      
       mealMoney = m_chickMoney +
      
         m_chipMoney;



    res 
      
      +=
      
         mealMoney;



    mealMoney 
      
      = m_cocoaMoney +
      
         m_coffeeMoney;



    res 
      
      +=
      
         mealMoney;



    
      
      
        return
      
      
         res;

}
      
    

可以看到,其中的mealMoney被赋值了两次,并且他没有做到累积结果的作用,累积结果给了res。所以,我们需要做重构,让这个变量的意图变的更加明确。

所以我们第一步,寻找这个变量第一次声明的地方,声明为const,并且将他改名,然后修改在第二次赋值之前的所有引用点,并且把第二次赋值进行重新声明:

      
        double
      
      
         getCost() 

{

    
      
      
        double
      
      
         res;



    const 
      
      
        double
      
       foodMoney = m_chickMoney +
      
         m_chipMoney;



    res 
      
      +=
      
         foodMoney;



    
      
      
        double
      
       mealMoney = m_cocoaMoney +
      
         m_coffeeMoney;



    res 
      
      +=
      
         mealMoney;



    
      
      
        return
      
      
         res;

}
      
    

可以看到,mealMoney已经被我们改成了const double foodMoney,并且我们修改了之后的引用点,并且我们在第二次赋值mealMoney的地方重新添加了声明。重复上述过程,进行第二次变量赋值的重构

      
        double
      
      
         getCost() 

{

    
      
      
        double
      
      
         res;



    
      
      
        const
      
      
        double
      
       foodMoney = m_chickMoney +
      
         m_chipMoney;



    res 
      
      +=
      
         foodMoney;



    
      
      
        const
      
      
        double
      
       drinkMoney = m_cocoaMoney +
      
         m_coffeeMoney;



    res 
      
      +=
      
         drinkMoney;



    
      
      
        return
      
      
         res;

}
      
    

可以看到,我们完成了变量的重构之后,函数对于临时变量之前的mealMoney的困惑已经没有了,整体因为变量名字的本身使得逻辑更加清晰。当然,这里我们暂时不考虑其他的重构手法:)

『重构--改善既有代码的设计』读书笔记----Split Temporary Variable


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论