函數重構手段1,Extract Method,講的是什么呢?把一個大函數改成幾個小函數。
遇到的困難是什么呢?大函數里往往會有臨時變量。下面分別簡述對策:
A,沒有臨時變量,太好了,直接把這部分代碼分到一個小函數里。
B,有臨時變量?把他作為參數,傳入小函數,經過處理之后,返回這個數。
C,多個臨時變量怎么辦?首先看看能否把這些變量分別用幾個小函數處理,且返回。否則,就用殺手锏:Replace Method with Method Object。
函數重構手段2,Inline Method,講的恰好是Extract Method的反面,即用函數體內容替換函數調用的地方。主要用在函數內容和函數名稱同樣清晰易讀。
函數重構手段3,Inline Temp,與Inline Method從廣義上講類似,即用臨時變量的表達式,替換使用該變量的地方。主要是因為臨時變量只賦過一次值。結果就是可以減少臨時變量的數量。
函數重構手段4,Replace Temp with query,就是把臨時變量的表達式放到某個小函數里返回。前提仍然是,臨時變量只賦了一次值。結果也是可以減少臨時變量。
函數重構手段5,Introduce explaining variable,就是把復雜表達式拆分,用temp或query分別表達,最后把temp或query整合成表達式,目的就一個,使代碼更易讀。
函數重構手段6,Split temporary variable,就是如果一個臨時變量被多次賦值,代表過多項意義時,就用多個變量代替這個變量,使得這多個變量分別代表不同的意義。
函數重構手段7,Remove assignments to parameters,是什么呢?即,不要對函數的虛參賦值。目的就是使代碼更清晰。做法就是把參數賦給一個臨時變量。
函數重構手段8,Replace method with method object,這個重構手段是函數重構的
殺手锏,無論你有多少個臨時變量的函數,都可以被重構。做法是,另外申明一個“函數類”,把大函數里的臨時變量作為“函數類”的成員變量,然后把大函數分解成“函數類”的多個小函數。
函數重構手段9,Substitute Algorithm,這個重構手段需要算法來支撐,即用一個更易讀的算發替換另一個算法,但保持函數的功能不變。