《重构—改善既有代码的设计》阅读随笔
引入解释性变量
当一个表达式比较复杂时,可以考虑引入解释性临时变量,将表达式的全部或者部分放在临时变量中去,以提升代码的可读性。
使用场景
- 在条件逻辑中;
- 在较长的算法过程中。
实例代码
重构前
// 创建一个随机规则
if (Math.random() * 10 > 5 && Math.random() * 10
重构后
boolean isMoreThanFive = Math.random() * 10 > 5;
boolean isLessThanSix = Math.random() * 10
分解临时变量
对于那些被多次赋值但作用却不同的变量,需要考虑分解之。
使用场景
- 临时变量的作用,不是循环或者结果收集时。
实例代码
重构前
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; // 体积
移除对参数的赋值
如果需要修改函数中传入的参数,那么最好新建一个临时变量来保存入参,然后再针对新的临时变量进行编辑。
使用场景
- 在需要修改入参且没有返回出参时。
实例代码
重构前
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 中也是这个情况)。因此,在对引用参数进行修改时,还会影响到原来调用函数地方的代码,极容易造成混乱,所以需要使用上面提到的“移除对参数的赋值”策略来重构代码。