重構改善既有代碼設計--重構手法05:Introduce Explaining Variable (引入解釋性變量)
阿新 • • 發佈:2017-09-15
其中 size 語句 臨時變量 變量名 內聯 some ria tro
發現:你有一個復雜的表達式。
解決:將該復雜的表達式(或其中的部分)的結果放進一個臨時變量,並以此變量名稱來解釋表達式用途。
//重構前 if((platform.toUpperCase().indexOf("MAC") > -1) && (browser.toUpperCase().indexOf("IE") > -1) && wasInitialized() && resize > 0) { //do something }
//重構後 finalboolean 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 (引入解釋性變量)