重构之重新组织函数(Inline Temp)
Inline Temp
概述
一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其它重构手法。
动机(Motivation)
Inline Temp多半是作为Replace Temp with Query的一部分来使用。惟一单独使用Inline Temp的情况是:你发现某个临时变量被赋予某个函数调用的返回值。一般来说,这样的临时变量不会有任何危害,你可以放心地把它留在那儿。但如果这个临时变量妨碍了其它重构手法---例如Extract Method,就应该将它inline化。
作法(Mechanics)
1、如果这个临时变量并未被声明为final,那就将它声明为final,然后编译。
这可以检查该临时变量是否真的只被赋值一次。
2、找到该临时变量的所有引用点,将它们替换为为临时变量赋值的语名中的等号右侧表达式。
3、每次修改后,编译并测试。
4、修改完所有引用点之后,删除该临时变量的声明式和赋值语名。
public class InlineTemp {
//before inline-temp
public double GetUserSalary(String name)
{
double salary = userSalary(name);
return salary ;
}
//after inline-temp
public double userSalaryAdvanced(String name)
{
return userSalary(name);
}
public double userSalary(String name){
if("王有财".equals(name)){
return 10000.0;
}
return 0;
}
}