Split Temporary Variable 分解临时变量

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

动机

临时变量有各种不同用途,其中某些用途会很自然地导致临时变量被多次赋值。“循环变量”和 “结果收集变量”就是两个典型例子:循环变景(loop variable)[Beck]会随循环的每次运行而改变(例如for(int i = 0; i<10; i++)语句中的i); 结果收集变量(collecting temporary variable) [Beck]负责将“通过整个函数的运算”而构成的某个值收集起来。

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

做法

  • 在待分解临时变量的声明及其第一次被赋值处,修改其名称。
    • 如果稍后之賦值语句是[i=i+某表达式]形式,就意味这是个结果收集变量,那么就不要分解它。结果收集变量的作用通常是累加、字符串接合、写入流或者向集合添加元素。
  • 将新的临时变量声明为final。
  • 以该临时变量的第二次赋值动作为界,修改此前对该临时变量的所有引用点,让它们引用新的临时变量。
  • 在第二次赋值处,重新声明原先那个临时变量。
  • 编译,测试。
  • 逐次重复上述过程。每次都在声明处对临时变量改名,并修改下次赋值之前的引用点。

results matching ""

    No results matching ""