剑弑 发表于 2019-2-28 23:15:23

重构之移除对参数的赋值(Remove Assignments to Parameters)

在开始写之前,我想了很久,实在想不出很好的解释去讲解这一重构手法的所以然来{:2_36:};所以我们就直接从代码上入手吧。重构前

public int discount(int inputVal,int quantity,int yearToDate)
      {
            if (inputVal>50)
            {
                inputVal -= 2;
            }
            if (quantity>100)
            {
                inputVal -= 1;
            }
            if (yearToDate>10000)
            {
                inputVal -= 4;
            }
            return inputVal;
      }
重构后

public int discount1(int inputVal, int quantity, int yearToDate)
      {
            int result = inputVal;
            if (inputVal > 50)
            {
                result -= 2;
            }
            if (quantity > 100)
            {
                result -= 1;
            }
            if (yearToDate > 10000)
            {
                result -= 4;
            }
            return result;
      }
从上面的代码段看,相信大家都会有一些疑问,这样重构有何意义呢?不就增加了个临时变量和更改了赋值吗?不增加不改变不还是一样。。。。。
这正是为什么在写之前想了很久,因为大家的这些疑问我也存在过;但大家有没有想过如果传入的参数是一个对象呢?而函数又带有了复杂逻辑,这样就很可能把人弄迷糊了,所以当你函数里存在对参数进行了赋值你大可先考虑下是否要用“ 重构之移除对参数的赋值(Remove Assignments to Parameters)”这一手法先进行一次重构,然后在去使用其实的重构手法把函数重构的漂漂亮亮的。


参考文献
重构——改善既有代码的设计   【美】Martin Fowler 著
                                                                         熊节 译






ibcadmin 发表于 2019-3-4 14:25:42

public int discount1(int inputVal, int quantity, int yearToDate)
      {
            
            if (inputVal > 50)
            {
               returnresult - 2;
            }
            if (quantity > 100)
            {
                returnresult - 1;
            }
            if (yearToDate > 10000)
            {
               returnresult - 4;
            }
            return 0;
      }

我觉得直接return比较好

剑弑 发表于 2019-3-4 21:51:14

ibcadmin 发表于 2019-3-4 14:25
public int discount1(int inputVal, int quantity, int yearToDate)
      { ...

嗯嗯,后面会有讨论到直接return会减少运行行数。
页: [1]
查看完整版本: 重构之移除对参数的赋值(Remove Assignments to Parameters)