(本文思想基本來自於經典著作《重構》一書)
我願意把代碼想象成女性,我希望在我面前的是一個美女,受不了丑陋的那部分。
優美的代碼可理解性高,修改成本低。不過優美的代碼是不容易一次寫出的。我的代碼剛剛寫完就是一坨屎。
比如有很多重復代碼,同一個類的兩個函數含有相同的表達式。
函數過長,以至於需要注釋來解釋區分。函數的參數超過3個。這些參數總是在一起出現,卻沒有為它們產生一個新的對象。
當有不同原因的改動時,有的類需要在不同方向上變化;當出於一個原因改動時,卻有不同的小類需要做出小修改。
某些類中的函數擁有很多其它類中的數據
……
不能忍了!還好,我院引進了先進的“整容技術”。讓我們一起來見識一下:
一、重新組織函數
1、提煉函數
這里有幾個要點:
a)創建一個函數,根據它“做什么”命名;
b)我比較喜歡讓每個函數都只返回一個值,返回的臨時變量在函數里命名一致,return result;
2、以查詢取代臨時變量:
這樣同一個類中的所有函數都可以獲得這份信息:
a)找出只被賦值一次的臨時變量,聲明為final,編譯測試,通過將其提煉為獨立函數;
3、引入解釋性變量:
用於當局部變量時提煉函數難以進行時,尤其適用於條件邏輯。
4、分解臨時變量:
不要讓臨時變量承擔一個以上的責任,每次復制,創造獨立的臨時變量,聲明為final。
5、在java中,不要對參數賦值,建立一個臨時變量,把待處理的參數賦予它:
java參數都是按值傳遞,給參數重新賦值,不會改變被傳遞對象的狀態。可以修改函數對象,但重新賦值沒有意義。
6、以函數對象取代函數:
建立一個新類,在其中建立一個final字段,用以保存源對象,同時建立對應原臨時變量的字段;
建立構造函數,接受源對象及原函數的所有參數作為參數;
這樣由於所有局部變量現在都成了字段,所以可以任意分解這個大函數,不必傳遞任何參數。
7、替換算法。