重新组织函数(三)

时间:2021-7-3 作者:qvyue

《重构—改善既有代码的设计》阅读随笔

引入解释性变量

当一个表达式比较复杂时,可以考虑引入解释性临时变量,将表达式的全部或者部分放在临时变量中去,以提升代码的可读性。

使用场景

  1. 在条件逻辑中;
  2. 在较长的算法过程中。

实例代码

重构前

        // 创建一个随机规则
        if (Math.random() * 10 > 5 && Math.random() * 10 

重构后

        boolean isMoreThanFive = Math.random() * 10 > 5;
        boolean isLessThanSix = Math.random() * 10 

分解临时变量

对于那些被多次赋值但作用却不同的变量,需要考虑分解之。

使用场景

  1. 临时变量的作用,不是循环或者结果收集时。

实例代码

重构前

        int height = 10;
        int width = 5;
        int length = 3;
        int area = height * width; // 面积
        area = area * length; // 体积

重构后

        final int area = height * width; // 面积
        final int volume = area * length; // 体积

移除对参数的赋值

如果需要修改函数中传入的参数,那么最好新建一个临时变量来保存入参,然后再针对新的临时变量进行编辑。

使用场景

  1. 在需要修改入参且没有返回出参时。

实例代码

重构前

    void setName(String name){
        name = "Jack";
        System.out.println(name);
    }

重构后

    void setName(String name){
        String result = name;
        result = "Jack";
        System.out.println(result);
    }

注意:在 Java 语言中,传递参数分为两种,一种是按值传递,这种情况比较好理解,在新函数中修改入参不会对源代码处的参数造成影响;还有一种是按引用传递,也就是传递对象,如果在新函数中修改引用的值,那么源代码处的对象参数也会跟着变更(在 JavaScript 中也是这个情况)。因此,在对引用参数进行修改时,还会影响到原来调用函数地方的代码,极容易造成混乱,所以需要使用上面提到的“移除对参数的赋值”策略来重构代码。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。