C# 7中本地函数的惯用命名规则是什么?

36

普通类方法,无论是实例方法还是静态方法,在大小写方面都有一个惯用的命名约定。目前不清楚在 C# 7 中引入的 本地函数 是否有命名约定。

本地函数是否应该使用 驼峰式 命名?

public static int Factorial(int n)
{
    return calcFactorial(n);

    int calcFactorial(int number) => (number < 2)
        ? 1
        : number * calcFactorial(number - 1);
}

或者 PascalCase

public static int Factorial(int n)
{
    return CalcFactorial(n);

    int CalcFactorial(int number) => (number < 2)
        ? 1
        : number * CalcFactorial(number - 1);
}

3
不要认为这个问题有一个“正确”的答案。我倾向于将命名保持为函数的方式,因为它本质上就是一个函数,只是声明方式不同。声明的位置不会改变类型的基本属性和语义,将它们在代码领域中保持一致可以使事情更容易理解,因此更容易维护。 - Tigran
2
C# 的约定是所有方法和函数的名称都应该使用 PascalCase,因此我会遵循标准约定,无论它们的可访问性如何。 - Jegan
3
我不明白,对于任何其他类型,您可以根据声明的位置具有不同的大小写,为什么函数不行? - bcl
4
我在私有函数中使用驼峰式命名法,因此我考虑在名称前面加下划线,例如 _camelCase,因为局部函数类似于“超级私有”,它们基本上是对类的其他部分私有的。 - AustinWBryan
2
Google的样式指南推荐使用微软的编码规范,具体可以参考https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/coding-style.md。其中提到:**我们对所有方法名(包括本地函数)使用PascalCasing命名法。** - Nathan Chappell
显示剩余2条评论
3个回答

16

我的标准始终是PascalCase(帕斯卡命名法),同时拼写完整单词。我不喜欢缩写词,因为它们可能有多个含义。

因此,在您的PascalCase方案中,我会将“Calc”单词拼写成以下方式:

public static int Factorial(int n)
{
    return CalculateFactorial(n);

    int CalculateFactorial(int number) => (number < 2)
        ? 1
        : number * CalculateFactorial(number - 1);
}

编译器已经有了很大的发展,再多写一些字以便清晰表达方法的含义,值得再敲击几下键盘。


2
虽然有推荐这样做,但我个人认为像这样命名无法帮助将它与公共方法区分开来。特别是当你在某些纯文本编辑器(如记事本)中查看源代码时。命名是帮助区分成员的一种方式。使成员名称看起来像公共成员一样,会带来与通常很重要的公共成员相同的感觉(类似于公共 API),甚至不应该被重命名。对我来说,所有公共成员都很重要,所有私有成员都可以自由重构。我会将其命名为calcFactorial,这仍然足够清晰明确。 - Hopeless

7

对此并没有“正确”的答案。

但是在我们的团队中,我们使用_PascalCase()来表示局部函数。

我们已经使用_xxx表示私有变量,并且在函数名前加下划线可以清楚地表明它是局部函数(就像是“私有的”)。而使用帕斯卡命名法(PascalCase)则有助于区分函数和变量。当使用非Visual Studio但基本文本编辑器时,这也非常方便。

public static int Factorial(int n)
{
    return _CalcFactorial(n);

    int _CalcFactorial(int number) => (number < 2)
        ? 1
        : number * _CalcFactorial(number - 1);
}

PS. SO的语法高亮器无法正确显示这段代码 :)


我被踩的事实只能证明这里没有单一的真理。;) 只要确保你的代码是一致的,也就是说,你的团队已经选择了一个变体并坚持使用它。 - Alex from Jitbit
没错,我的团队也使用特定的命名约定,在变量的开头添加大约5个字母来描述其范围/数组/类型。这是一种奇怪的约定,但这就是他们达成的共识。 - Taher

4
没有绝对正确的答案,但微软的指南建议使用 PascalCase:
当命名类型的公共成员时,如字段、属性、事件、方法和局部函数,请使用帕斯卡大小写。

https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions


编辑: 看起来他们最近删除了那个声明。无论如何,在所有文档中他们仍然使用 PascalCase(例如https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/local-functions),尽管没有明确说明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接