范例(Examples):有局部變量(Using Local Variables)
是的,就在局部變量,包括傳進(jìn)源函數(shù)的參數(shù)和源函數(shù)所聲明的臨時變量。局部變量的作用域僅限于源函數(shù),所以當(dāng)我使用Extract Method(110)時,必須花費(fèi)額外工夫去處理這些變量.某些時候它們甚至可能妨礙我,使我根本無法進(jìn)行這項重構(gòu).
局部變量最簡單的情況是:被提煉碼只是讀取這些變量的值,并不修改它們.這種情況下我可以簡單地將它們當(dāng)作參數(shù)傳給目標(biāo)函數(shù).所以如果我面對下列函數(shù):
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);
}
我就可以將[打印詳細(xì)信息]這一部分提煉為[帶一個參數(shù)的函數(shù)]:
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);
}
必要的話,你可以用這種手法處理多個局部變量.