范例(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);
}
必要的話,你可以用這種手法處理多個局部變量.