2009-11-16 20 views
1

命名一個內部有out參數的方法的通常偏好是什麼?如何命名具有out參數的方法?

通常我使用Get作爲前綴來提及該方法返回一個值(如GetMyBusiness)。

但是如果在方法調用之後會設置一個out參數呢? 方法名應該提及這一點,只關注返回值?

謝謝!

回答

1

命名法中沒有標準。但是,如果您的方法將要處理複合類型,請考慮採用使用Get ... And ...()的慣例來指示有兩件事正在進行。例如:

int GetPopulationAndMeanAge(out double meanAge) 
{ 
    // ... 
    meanAge = CalculateMeanAge(); 
    return totalPopulation; 
} 

我認爲更好的方法是返回一個複合類型。在垃圾收集的語言中,除非在調用這種方法(例如數百萬次並且儀器顯示GC未正確處理負載)的情況下,否則確實沒有任何藉口NOT來做到這一點。在非GC語言中,它提出了一個小問題,以確保在完成後確定誰負責清理內存。

重構之前的成複合型(C#):

public class PopulationStatistics { 
    int Population { get; set; } 
    double MeanAge { get; set; } 
} 


PopulationStatistics GetPopulationStatistics() 
{ 
    // ... 
    return new PopulationStatistics { Population = totalPopulation, MeanAge = CalculateMeanAge }; 
} 
0

爲什麼不返回該參數呢?

無論如何,你可以使用「修改」或「處理」前綴。

0

我會說在這種情況下,更重要的是保持您的命名一致,而不是您的命名方案實際是。它讓那些代碼背後的人變得更容易,因爲他們會根據他們的命名方式知道你的方法會有什麼期望。

話雖如此,Get應該就好了。

0

這取決於語言。
在C#中,例如,沒有必要將其添加到該函數的名稱,它已經在簽名:你不能調用功能,而無需再次指定out,所以沒有遺漏的副作用的風險:

Int32.TryParse("123", out number); 
+0

但在這裏,你不知道,如果這返回一個布爾值與否。詞「嘗試」可能是一條線索。當你嘗試一些事情時,無論你成功或失敗,你都可以期待bool的價值。 – pencilCake 2009-11-16 13:33:39

+1

@Burak:Intellisense會告訴你它返回的結果。您只需調用它幾個步驟TakeStringAndTryToConvertItToANumberReturningTheNumberAsAnOutParamAndBoolOfIfItWorked() – cjk 2009-11-16 13:37:08

+0

這是真的 - 但這是描述性的。函數*試圖解析* - 好名字。但是,名稱本身並沒有說明函數有一個out參數,這會產生冗餘,因爲簽名已經有了。 – Kobi 2009-11-16 13:38:31

1

方法名稱應該描述方法的功能(自編碼代碼)。如果方法簽名表明它使用了out參數,那麼簽名應該足以提醒開發人員在變量中會返回一個值。我認爲這是多餘的,因此,將其包含在方法名稱中。即使自我記錄的代碼也應該清晰簡明。如果你的語言沒有說清楚,那麼我會以名稱記錄它,如果它可以清楚簡明地完成,或者使用內嵌評論。

+0

+1 - 絕對要命名該函數,而不是返回。 – cjk 2009-11-16 13:35:31

相關問題