范例(Examples):有局部变量(Using Local Variables)
是的,就在局部变量,包括传进源函数的参数和源函数所声明的临时变量。局部变量的作用域仅限于源函数,所以当我使用Extract Method(110)时,必须花费额外工夫去处理这些变量.某些时候它们甚至可能妨碍我,使我根本无法进行这项重构.
局部变量最简单的情况是:被提炼码只是读取这些变量的值,并不修改它们.这种情况下我可以简单地将它们当作参数传给目标函数.所以如果我面对下列函数:
void printOwing() {
Enumeration e = _orders.elements();
double outstanding = 0.0;
printBanner();
// calculate outstanding
while(e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}
//print details
System.out.println("name:" + _name);
System.out.println("amount" + outstanding);
}
我就可以将[打印详细信息]这一部分提炼为[带一个参数的函数]:
void printOwing() {
Enumeration e = _orders.elements();
double outstanding = 0.0;
printBanner();
// calculate outstanding
while(e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}
printDetails(outstanding);
}
void printDetails(double outstanding) {
System.out.println("name:" + _name);
System.out.println("amount" + outstanding);
}
必要的话,你可以用这种手法处理多个局部变量.