命名一个在其中包含out参数的方法的常见首选项是什么?
通常我使用Get作为前缀来提及该方法返回一个值(如GetMyBusiness)。
但是如果在方法调用之后会有一个out参数怎么办? 方法名称是否应提及此并仅关注返回值?
谢谢!
答案 0 :(得分:1)
方法名称应描述方法的功能(自记录代码)。如果方法签名将指示它使用out参数,则签名应足以警告开发人员将在变量中返回值。因此,我认为将它包含在方法名称中是多余的。即使是自我记录的代码也应该清晰简洁。如果您的语言不清楚,那么我会在名称中记录它,如果可以清楚简明地完成,或使用内联注释。
答案 1 :(得分:1)
命名法没有标准。但是,如果您的方法将作用于复合类型,请考虑采用使用Get ... And ...()的约定来表示有两件事情正在发生。例如:
int GetPopulationAndMeanAge(out double meanAge)
{
// ...
meanAge = CalculateMeanAge();
return totalPopulation;
}
我认为更好的方法是返回复合类型。在垃圾收集语言中,没有理由 NOT 这样做,除非在调用这种方法的情况下,例如数百万次并且仪器显示GC没有正确处理加载。在非GC语言中,它确保在完成后确定谁负责清理内存方面存在一个小问题。
将前一个重构为复合类型(C#):
public class PopulationStatistics {
int Population { get; set; }
double MeanAge { get; set; }
}
PopulationStatistics GetPopulationStatistics()
{
// ...
return new PopulationStatistics { Population = totalPopulation, MeanAge = CalculateMeanAge };
}
答案 2 :(得分:0)
为什么不返回该参数呢?
无论如何,你可以使用“修改”或“处理”前缀。
答案 3 :(得分:0)
我会说在这种情况下,保持命名一致而不是命名方案实际上是更重要的。它使那些代码背后的人更容易,因为他们会根据他们的命名方式知道你的方法会有什么期望。
话虽如此,Get
应该没问题。
答案 4 :(得分:0)
这取决于语言
例如,在C#中,不需要将它添加到函数的名称中,它已经在签名中:如果不再指定out
,则无法调用函数,因此不存在遗漏副作用的风险:< / p>
Int32.TryParse("123", out number);