多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php框架 > 框架設(shè)計(jì) > [置頂] 重新組織函數(shù)----Extra Method(提煉函數(shù))

[置頂] 重新組織函數(shù)----Extra Method(提煉函數(shù))

來源:程序員人生   發(fā)布時(shí)間:2015-01-07 08:19:28 閱讀次數(shù):3273次

你有1段代碼可以被組織在1起并獨(dú)立出來

講這段代碼放在1個(gè)獨(dú)立函數(shù)中,并讓函數(shù)名稱解釋該函數(shù)的用處

范例:無局部變量

void printOwing(double amount){

printBanner();

//printDetail

System.out.println("name:"+_name);

System.out.println("amount:"+amount);

}

重構(gòu)后代碼:

void printOwint(double amount){

printBanner();

printDetail(amount);

}

void printDetail(double amount){

System.out.println("name:"+_name);

     System.out.println("amount:"+amount);

}


動(dòng)機(jī)

Extra Method(提煉函數(shù))是最經(jīng)常使用的重構(gòu)手法之1。當(dāng)看見1個(gè)太長(zhǎng)的函數(shù)或1段需要注釋才能讓人理解用處的代碼,就應(yīng)當(dāng)將這段代碼放進(jìn)1個(gè)獨(dú)立的函數(shù)中去。

范例:有局部變量

果真這么簡(jiǎn)單?這個(gè)重構(gòu)手法的困難點(diǎn)在哪里?是的,就在局部變量,包括傳進(jìn)源函數(shù)的參數(shù)和源函數(shù)所聲明的零時(shí)變量。局部變量的作用域僅限于源函數(shù),所以當(dāng)我使用Extra Method(提煉函數(shù))時(shí),必須花費(fèi)額外工夫去處理這些變量。某些時(shí)候它們可能妨礙我,使我根本沒法進(jìn)行這項(xiàng)重構(gòu)。
局部變量最簡(jiǎn)單的情況是:被提煉代碼段只是讀取這些變量的值,其實(shí)不修改它們。這類情況可以簡(jiǎn)單的將它們當(dāng)作參數(shù)傳給目標(biāo)函數(shù)

void printOwing{
Enumeration e=orders.elements();
double outstanding=0.0;
printBanner();

//calculate outstanding
while(e.hasMoreElements){
Order order=(Order)e.nextElement();
outstanding +=each.getAmount();
}
System.out.println("name:"+_name);
System.out.println("amount:"+outstanding);

}


就能夠講打印詳細(xì)信息提煉為帶1個(gè)參數(shù)的函數(shù):
void printOwing{
Enumeration e=orders.elements();
double outstanding=0.0;
printBanner();

//calculate outstanding
while(e.hasMoreElements){
Order order=(Order)e.nextElement();
outstanding +=each.getAmount();
}
printDetails(outstading);
}

void printDetails(double outstanding){
System.out.println("name:"+_name);
System.out.println("amount:"+outstanding);
}

必要的話可以用這類手法處理多個(gè)局部變量


范例:對(duì)局部變量再賦值


如果被提煉的代碼對(duì)局部變量賦值,問題就變得復(fù)雜了。這里只討論臨時(shí)變量的問題。如果你發(fā)現(xiàn)源函數(shù)的參數(shù)被賦值,應(yīng)當(dāng)馬上使用Remove Assignments to Parameters(131)。
被賦值的臨時(shí)變量也分為兩種情況。較簡(jiǎn)單的情況是:這個(gè)變量只在被提煉的代碼段中使用。果真如此,你可以將這個(gè)臨時(shí)變量的聲明移動(dòng)到被提煉的代碼段中,然后1起提煉出去。另外一種情況是:被提煉代碼段以外的代碼也使用了這個(gè)變量。這又分為兩種情況:如果這個(gè)變量在被提煉代碼段以后再未被使用,你只需要在目標(biāo)函數(shù)中修改它就能夠了;如果被提煉代碼段以后的代碼還使用了這個(gè)變量,你就需要讓目標(biāo)函數(shù)返回該變量改變后的值。以下代碼可以說明這幾種不同的情況。

void printOwing(){
Enumeration e=_orders.elements();
double outstanding=0.0;
printBanner();
//calculate outstanding
while(e.hasMoreElements){
Order order=(Order)e.nextElement();
outstanding+=order.getAmount();
}
printDetails(outstanding);

}

現(xiàn)在把“計(jì)算”代碼提煉出來:
void printOwing(){
printBanner();
double outstanding=getOutstanding();
printDetails(outstanding);

}

double getOutstanding(){
Enumeration e=_orders.elements();
double outstanding=0.0;
while(e.hasMoreElements){
Order order=(Order)e.nextElement();
outstanding+=order.getAmount();
}
return outstading;
}





生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日本最猛黑人xxxx猛交 | 亚洲欧美不卡视频 | 国产毛片a级 | 在线亚洲观看 | 国产精品福利在线观看入口 | 国产欧美又粗又猛又爽老 | 中文字幕在线观看网站 | 国产h视频在线观看免费 | 久久国产精品久久国产精品 | 亚洲剧情在线观看 | 波多野结衣不卡 | 另类小说亚洲 | 亚洲欧美不卡视频 | 亚洲精品国产精品乱码不97 | 99久久综合狠狠综合久久aⅴ | 亚洲欧洲在线观看 | 狠狠操网站 | 亚洲fuli在线观看 | 欧美18videosex性孕妇 | 欧美日韩亚洲一区二区 | 最近最新高清中文字幕6页 最近最新免费中文字幕8 | 一区二区三区欧美日韩国产 | 中文字幕25页 | 性生一级欧美片 | 高清无遮挡在线观看 | 天堂最新版www在线观看 | 亚洲高清影院 | 欧美黄色片一级 | 欧美日韩a | 美国一级免费 | 精品亚洲成a人在线播放 | 午夜 在线播放 | riav久久中文一区二区 | 国内精品久久久久久影院8f | 欧美一区二区三区在线可观看 | baoyu116.永久免费视频入口 | 国产不卡视频一区二区在线观看 | 欧美五月 | 免费国产成人高清在线观看不卡 | 欧美日韩亚洲精品一区二区 | 久久久精品456亚洲影院 |