2010-05-09 22 views
7

在編寫函數時,我的大腦總是花費幾毫秒來檢查給定函數的哪個參數順序最好。關於函數中參數順序的約定

我應該寫:

public Comment AddComment(long userID, string title, string text) 

或者可能:

public Comment AddComment(string title, string text, long userID) 

爲什麼不:

public Comment AddComment(string title, long userID, string text) 

你訂購你的函數的參數時遵循任何規則? 你會首先放置哪個參數?

+1

好問題,但是你的措辭方式,這聽起來像一個開放式的討論......你是否真的(或者你更願意)問是否有一個既定的參數排序約定?如果是這樣,哪種語言/環境?就像大寫一樣,語言之間的這種事情肯定會有所不同。 – 2010-05-09 04:10:17

回答

3

只有3個規則,我通常適用於:

  • 如果語言允許傳遞一個哈希/地圖/關聯數組作爲一個參數,儘量選擇經過這一點。這對於具有> = 3參數的方法特別有用,特別是當這些相同的參數將被傳遞給嵌套函數調用時。

    這允許更簡單的維護 - 添加另一個參數(尤其是當在10級深度嵌套函數調用之間傳遞相同的參數列表時)涉及更改代碼中的1個位置(最終調用者)而不是每個單一函數它將這個列表傳遞給其他地方。

    這在C++等語言中沒有類型檢查的小缺陷(例如,如果這是一個問題,您的編譯器無法檢查哈希/映射是否包含正確類型的值)可以將該參數映射封裝爲結構/類來代替。

  • 如果語言允許參數的缺省值(如C++,Sybase存儲過程),你明明離開可選參數是最後一次,和不太可能的參數是用一個值來指定,後面的在列表中它應該去。

  • 否則,在任何邏輯分組中進行排序都是最具可讀性/可維護性的。

    這可能有點主觀 - 例如,下一個/以前的體重/身高可以同樣有效地訂購next_weight,next_height, prev_weight, prev_heightnext_weight, prev_weight, next_height, prev_height。再次,三個主要考慮因素是您的可讀性/邏輯性以及易於維護。

    就可讀性而言,您可以按照類型或意義對它們進行排序。就「邏輯性」而言,您可以按意義排列它們(例如將所有「下一個」組合在一起,或者將所有高度組合在一起),或者通過其他位置施加的某個順序(例如,對應數據庫表中的列順序)或GUI中的字段順序(更糟的是,因爲它可能會改變)。

    就維護而言,如果沒有明顯有意義的訂單結晶,字母數字順序是最好的,因爲它允許非常簡單的方式通過掃描找到參數,尤其是決定插入新參數的位置。

1

就個人而言,我會做第一個,因爲這正是我在GUI中的順序:用戶,標題,文本。

但正如大衛所說,這是非常開放的。如果我的項目標準需要特殊訂單,我會使用它。