返回總目錄 本小節目錄 Rename Method(函數改名) Add Parameter(添加參數) Remove Parameter(移除參數) 1Rename Method(函數改名) 概要 函數的名稱未能揭示函數的用途。 修改函數的名稱。 動機 將複雜的處理過程分解成小函數是良好的編程風格。 ...
本小節目錄
1Rename Method(函數改名)
概要
函數的名稱未能揭示函數的用途。
修改函數的名稱。
動機
將複雜的處理過程分解成小函數是良好的編程風格。但是,如果做的不好,會使你費盡周折卻弄不清楚這些小函數各自的用途。要避免這些麻煩,關鍵在於給函數起一個好名稱。函數的名稱應該準確表達它的用途。給函數命名有一個好辦法:首先考慮給這個函數寫上一句怎樣的註釋,然後想辦法將註釋變成函數名稱。
如果你看到一個函數名稱不能很好的表達它的用途,應該馬上加以修改。
範例
如下代碼所示,假如一個公司建立一個員工的類,類中有一個員工名字的欄位和一個按照小時計算員工收入的方法,那麼下麵代碼的取名就顯得很難理解了,所以我們會重構名稱。
public class Person { public string FN { get; set; } public decimal ClcHrlyPR() { // code to calculate hourly payrate return 0m; } }
重構後代碼如下所示,這樣看起來就非常清晰,如果有新進項目組的成員,也會變得很樂意看這個代碼。
public class Employee { public string FirstName { get; set; } public decimal CalculateHourlyPay() { // code to calculate hourly payrate return 0m; } }
小結
此重構經常被廣大程式員所忽視,但是帶來的隱患是不可估量的,也許老闆要修改功能,那我們來看這段沒有重構的代碼(就算是自己寫的,但由於時間和項目多等關係,我們也很難理解了),然後就會變得焦頭爛額。相反重構後的代碼就會覺得一目瞭然、賞心悅目。
當然了,本文中的改名不僅僅是函數,還包括類、方法參數、變數、委托、事件等等元素。
2Add Parameter(添加參數)
概要
某個函數需要從調用端得到更多的信息,那麼為此函數添加一個參數,讓該參數帶進函數所需信息。動機
這個重構手法很常用,我相信你肯定用過它。
你必須修改一個函數,而修改後的函數需要一些過去沒有的信息,因此需要給該函數添加一個參數。
那麼,什麼時候不使用本項重構?
除了Add Parameter外,只要有可能,其他選擇都比“Add Parameter”要好,因為有可能其他選擇不會增加參數列的長度。過長的參數列是不好的味道,因為程式員很難記住那麼多參數,而且往往伴隨著壞味道Data Clumps。
3Remove Parameter(移除參數)
概要
函數本體不再需要某個參數,將該參數去除。
動機
程式員可能經常添加參數,卻往往不願意去掉它們。他們想:無論如何,多餘的參數不會引起任何問題,而且以後還可能用上它。
這種想法很糟糕!參數代表著函數所需的信息,不同參數代表不同意義。函數調用者必須為每一個參數操心該傳什麼東西進去。如果不去掉多餘參數,就是讓你的每一位用戶多費一份心。
To Be Continued……