【问题标题】:How to name a method that has an out parameter?如何命名具有 out 参数的方法?
【发布时间】:2010-12-17 01:32:21
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: naming-conventions parameters return out


    【解决方案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 };
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

            Int32.TryParse("123", out number);
            

            【讨论】:

            • 但是在这里,您不知道这是否返回布尔值。不过,“尝试”这个词可能是一个线索。当你尝试某事时,要么成功要么失败,所以很自然地你可能会期待 bool 值。
            • @Burak:Intellisense 会告诉你它返回了什么。您只需几步即可将其称为 TakeStringAndTryToConvertItToANumberReturningTheNumberAsAnOutParamAndBoolOfIfItWorked()
            • 确实如此 - 但这是描述性的。函数尝试解析 - 好名字。但是,名称本身并没有表明该函数有一个 out 参数,这会产生冗余,因为签名已经有了。
            • 我认为如果一个方法过程是一种尝试,并且返回值用布尔值指向,那么尝试作为前缀确实是一个很好的候选。如果方法看起来可能有多个输出参数,最好创建一个方法参数对象并返回一个以 Get 开头的方法名称。请参阅 plinth 对此问题的回答。
            猜你喜欢
            • 2014-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-12
            • 1970-01-01
            • 2022-11-01
            相关资源
            最近更新 更多