命名内部具有 out 参数的方法的常见偏好是什么?
通常我使用 Get 作为前缀来提及该方法返回一个值(如 GetMyBusiness)。
但是,如果在方法调用之后会设置一个 out 参数怎么办?方法名称是否应该提及这一点并只关注返回值?
谢谢!
命名内部具有 out 参数的方法的常见偏好是什么?
通常我使用 Get 作为前缀来提及该方法返回一个值(如 GetMyBusiness)。
但是,如果在方法调用之后会设置一个 out 参数怎么办?方法名称是否应该提及这一点并只关注返回值?
谢谢!
方法名称应该描述方法的功能(自文档代码)。如果方法签名将表明它使用一个 out 参数,则该签名应该足以提醒开发人员将在变量中返回一个值。因此,我认为将其包含在方法名称中是多余的。即使是自我记录的代码也应该清晰简洁。如果您的语言没有说明这一点,那么我会以名称记录它,如果它可以清晰简洁地完成,或者使用内联注释。
命名没有标准。但是,如果您的方法要作用于复合类型,请考虑采用使用 Get...And...() 的约定来指示发生了两件事。例如:
int GetPopulationAndMeanAge(out double meanAge)
{
// ...
meanAge = CalculateMeanAge();
return totalPopulation;
}
我认为更好的方法是返回一个复合类型。在垃圾收集语言中,真的没有理由不这样做,除非这样的方法被调用了数百万次并且检测表明 GC 没有正确处理负载。在非 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);