【发布时间】:2010-12-17 01:32:21
【问题描述】:
命名内部具有 out 参数的方法的常见偏好是什么?
通常我使用 Get 作为前缀来提及该方法返回一个值(如 GetMyBusiness)。
但是如果有一个out参数会在方法调用之后设置呢? 方法名称是否应该提及这一点并只关注返回值?
谢谢!
【问题讨论】:
标签: naming-conventions parameters return out
命名内部具有 out 参数的方法的常见偏好是什么?
通常我使用 Get 作为前缀来提及该方法返回一个值(如 GetMyBusiness)。
但是如果有一个out参数会在方法调用之后设置呢? 方法名称是否应该提及这一点并只关注返回值?
谢谢!
【问题讨论】:
标签: naming-conventions parameters return 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 };
}
【讨论】:
方法名称应该描述方法的功能(自文档代码)。如果方法签名将表明它使用一个 out 参数,则该签名应该足以提醒开发人员将在变量中返回一个值。因此,我认为将其包含在方法名称中是多余的。即使是自我记录的代码也应该清晰简洁。如果您的语言没有说明这一点,那么我会以名称记录它,如果它可以清晰简洁地完成,或者使用内联 cmets。
【讨论】:
为什么不返回那个参数呢?
无论如何,您可以使用“修改”或“处理”前缀。
【讨论】:
我想说,在这种情况下,保持你的命名一致比你的命名方案实际是什么更重要。它让那些在你身后编码的人更容易,因为他们会根据它们的命名方式知道对你的方法有什么期望。
话虽如此,Get 应该没问题。
【讨论】:
这取决于语言。
例如,在 C# 中,无需将其添加到函数名称中,它已经在签名中:如果不再次指定 out,则无法调用该函数,因此不会有遗漏副作用的风险:
Int32.TryParse("123", out number);
【讨论】: