1

命名内部具有 out 参数的方法的常见偏好是什么?

通常我使用 Get 作为前缀来提及该方法返回一个值(如 GetMyBusiness)。

但是,如果在方法调用之后会设置一个 out 参数怎么办?方法名称是否应该提及这一点并只关注返回值?

谢谢!

4

5 回答 5

1

方法名称应该描述方法的功能(自文档代码)。如果方法签名将表明它使用一个 out 参数,则该签名应该足以提醒开发人员将在变量中返回一个值。因此,我认为将其包含在方法名称中是多余的。即使是自我记录的代码也应该清晰简洁。如果您的语言没有说明这一点,那么我会以名称记录它,如果它可以清晰简洁地完成,或者使用内联注释。

于 2009-11-16T13:31:14.513 回答
1

命名没有标准。但是,如果您的方法要作用于复合类型,请考虑采用使用 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 };
}
于 2009-11-16T13:43:00.733 回答
0

为什么不返回那个参数呢?

无论如何,您可以使用“修改”或“处理”前缀。

于 2009-11-16T13:27:26.910 回答
0

我想说在这种情况下,保持命名一致而不是实际命名方案更重要。它使那些在你身后编码的人更容易,因为他们会根据它们的命名方式知道你的方法会发生什么。

话虽如此,Get应该没问题。

于 2009-11-16T13:28:11.497 回答
0

这取决于语言。
例如,在 C# 中,无需将其添加到函数名称中,它已经在签名中:如果不out再次指定就无法调用函数,因此不会有遗漏副作用的风险:

Int32.TryParse("123", out number);
于 2009-11-16T13:30:20.023 回答