• 重构改善既有代码设计--重构手法06:Split Temporary Variable (分解临时变量)


    你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果。针对每次赋值,创造一个独立、对应的临时变量

    double temp = 2 * (_height + _width);
    System.out.println(temp);
    temp = _height * _width;
    System.out.println(temp);

    重构后:

    final double perimeter = 2 * (_height + _width);
    System.out.println(perimeter);
    final double area = _height * _width;
    System.out.println(area);

    动机:临时变量有各种不同用途,其中某些用途会很自然的导致临时变量被多次赋值。“循环变量”和“结果收集变量”就是典型的例子:循环变量会随循环的每次运行而改变;   结果收集变量负责将“通过这个函数的运算”而构成的某个值收集起来。

             除了这2种情况,还有很多临时变量保存一段冗长代码的运算结果,以便稍后使用。这种临时变量应该只被赋值一次。如果它们被赋值超过一次,就意味着它们在函数中承担了一个以上的职责。如果临时变量承担多个责任,它就应该被替换为多个临时变量,每个变量只承担一个责任。同一个临时变量承担2件不同的事情,会令代码阅读者糊涂。

    做法:1、在待分解临时变量的声明及其第一次被赋值处,修改其名称。如果是结果收集变量就不要分解它。

             2、将新的临时变量声明为final。

             3、以该临时变量的第二次赋值动作为边界,修改此前对该临时变量的所有引用点,让它们引用新的临时变量。

             4、在第二次赋值处,重新声明原先的那个临时变量。

             5、编译、测试。

             6、逐次重复上述过程。每次都在声明处对临时变量改名,并修改下次赋值之前的引用点。

    总结:即在一个函数内部,除了循环变量和收集变量这两种外,其余的临时变量只能被赋值一次,如果多次赋值,则应该解剖析出更多的临时变量出来,而为了验证是否多次赋值,同样可以声明为final;当解剖出多个临时变量,并且此时都是只赋值一次,那么就可以采用使用查询替换临时变量或则内联临时变量继续优化,或者是解释性变量方式优化代码了。

  • 相关阅读:
    keras: 在构建LSTM模型时,使用变长序列的方法
    keras:Exception: Error when checking model target
    Scipy.sparse矩阵的存储,读取和转化为稠密矩阵
    Feature Selection 其一 —— Filter Approach
    超限学习机 (Extreme Learning Machine, ELM) 学习笔记 (一)
    [IR课程笔记]Web search
    [数据挖掘课程笔记]无监督学习——聚类(clustering)
    [IR课程笔记]Query Refinement and Relevance Feedback
    [IR课程笔记]Hyperlink-Induced Topic Search(HITS)
    DIARY10-05
  • 原文地址:https://www.cnblogs.com/pony1223/p/7523571.html
Copyright © 2020-2023  润新知