提炼变量:如下所示:
1.反向重构:内联变量。
2.动机:面对一块复杂逻辑时,局部变量能给其中一部分命名,这样就可以更好地理解这部分逻辑要干什么。
3.做法:如下所示:
1>.确认要提炼的表达式没有副作用。
2>.声明一个不可以修改的变量,把你想要提炼的表达式复制一份,以该表达式的结果值给这个变量赋值。
3>.用这个新变量取代原来的表达式。
4>.测试。
4.范例:如下所示:
1>.源代码如下所示:
function price(order) {
// price is base price - quantity discount + shipping
return order.quantity * order.itemPrice -
Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 +
Math.min(order.quantity * order.itemPrice * 0.1, 100);
}
2>.重构代码如下所示:
function price(order) {
const basePrice = order.quantity * order.itemPrice;
const quantityDiscount = Math.max(0, order.quantity - 500) * order.itemPrice * 0.05;
const shipping = Math.min(basePrice * 0.1, 100);
return basePrice - quantityDiscount + shipping;
}
内联变量:如下所示:
1.反向重构:提炼变量。
2.动机:当变量并不比表达式更具表现力或者变量可能会妨碍重构附近代码时,就要消除该变量。
3.做法:如下所示:
1>.检查确认变量赋值语句的右侧表达式没有副作用。
2>.如果变量没有被声明为不可修改,先将其变成不可修改,并执行测试,从而确保该变量只被赋值一次。
3>.找到第一处使用该变量的地方,将其替换为直接使用赋值语句的右侧表达式。
4>.测试。
5>.重复前面两步,逐一替换其他所有使用该变量的地方。
6>.删除该变量的声明点和赋值语句。
7>.测试。
4.范例:如下所示:
1>.源代码如下所示:
let basePrice = anOrder.basePrice;
return basePrice > 1000;
2.重构代码如下所示:
return anOrder.basePrice > 1000;