命名一個內部有out參數的方法的通常偏好是什麼?如何命名具有out參數的方法?
通常我使用Get作爲前綴來提及該方法返回一個值(如GetMyBusiness)。
但是如果在方法調用之後會設置一個out參數呢? 方法名應該提及這一點,只關注返回值?
謝謝!
命名一個內部有out參數的方法的通常偏好是什麼?如何命名具有out參數的方法?
通常我使用Get作爲前綴來提及該方法返回一個值(如GetMyBusiness)。
但是如果在方法調用之後會設置一個out參數呢? 方法名應該提及這一點,只關注返回值?
謝謝!
命名法中沒有標準。但是,如果您的方法將要處理複合類型,請考慮採用使用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 };
}
爲什麼不返回該參數呢?
無論如何,你可以使用「修改」或「處理」前綴。
我會說在這種情況下,更重要的是保持您的命名一致,而不是您的命名方案實際是。它讓那些代碼背後的人變得更容易,因爲他們會根據他們的命名方式知道你的方法會有什麼期望。
話雖如此,Get
應該就好了。
這取決於語言。
在C#中,例如,沒有必要將其添加到該函數的名稱,它已經在簽名:你不能調用功能,而無需再次指定out
,所以沒有遺漏的副作用的風險:
Int32.TryParse("123", out number);
方法名稱應該描述方法的功能(自編碼代碼)。如果方法簽名表明它使用了out參數,那麼簽名應該足以提醒開發人員在變量中會返回一個值。我認爲這是多餘的,因此,將其包含在方法名稱中。即使自我記錄的代碼也應該清晰簡明。如果你的語言沒有說清楚,那麼我會以名稱記錄它,如果它可以清楚簡明地完成,或者使用內嵌評論。
+1 - 絕對要命名該函數,而不是返回。 – cjk 2009-11-16 13:35:31
但在這裏,你不知道,如果這返回一個布爾值與否。詞「嘗試」可能是一條線索。當你嘗試一些事情時,無論你成功或失敗,你都可以期待bool的價值。 – pencilCake 2009-11-16 13:33:39
@Burak:Intellisense會告訴你它返回的結果。您只需調用它幾個步驟TakeStringAndTryToConvertItToANumberReturningTheNumberAsAnOutParamAndBoolOfIfItWorked() – cjk 2009-11-16 13:37:08
這是真的 - 但這是描述性的。函數*試圖解析* - 好名字。但是,名稱本身並沒有說明函數有一個out參數,這會產生冗餘,因爲簽名已經有了。 – Kobi 2009-11-16 13:38:31