1. 程式人生 > >重構改善既有代碼設計--重構手法05:Introduce Explaining Variable (引入解釋性變量)

重構改善既有代碼設計--重構手法05:Introduce Explaining Variable (引入解釋性變量)

其中 size 語句 臨時變量 變量名 內聯 some ria tro

發現:你有一個復雜的表達式。

解決:將該復雜的表達式(或其中的部分)的結果放進一個臨時變量,並以此變量名稱來解釋表達式用途。

//重構前  
if((platform.toUpperCase().indexOf("MAC") > -1) &&  
    (browser.toUpperCase().indexOf("IE") > -1) &&  
    wasInitialized() && resize > 0)  
{  
    //do something  
}  
//重構後  
final
boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1; final boolean isIEBrowser = browser.toUpperCase().indexOf("IE") > -1; final boolean wasResize = resize > 0; if(isMacOs && isIEBrowser && wasInitialized() && wasResize){ //do something }

動機:表達式有可能非常復雜而難以閱讀。這種情況下,臨時變量可以幫助你將表達式分解為比較容易管理的形式。

在條件邏輯中,Introduce Explaining Variable (引入解釋性變量)是一個很常見的手法,但是最好盡量使用 Extract Method (提煉函數)來解釋一段代碼的意義。畢竟臨時變量只在他所處的那個函數才有意義,局限性較大。函數則可以在對象的這個生命中都有用,並且可被其他對象使用。但有時候,當局部變量使Extract Method (提煉函數)難以進行時,就可以使用Introduce Explaining Variable (引入解釋性變量).

做法:1、聲明final臨時變量,將待分解的復雜表達式中的一部分動作的運算結果賦值給他。

2、將表達式中的“運算結果”這一部分,替換為上述臨時變量。如果被替換的這一部分在代碼中重復出現,你可以一次一個,逐次替換。

3、編譯、測試

4、重復上述過程,處理表達式的其他部分。

總結:這種一般很少用,一般就用於比較復雜的語句計算的時候,定義一個臨時變量,因為這個時候采用內聯可能會顯得太長了,反而不好看,所以就定義一個有意義的臨時變量,並將變量聲明為final

重構改善既有代碼設計--重構手法05:Introduce Explaining Variable (引入解釋性變量)