【问题标题】:Is there a naming guideline for iterator variables where the singular form is the same as the plural form?单数形式与复数形式相同的迭代器变量是否有命名指南?
【发布时间】:2013-12-10 14:53:03
【问题描述】:

在 .NET 中有一个普遍接受和广泛采用的命名约定。例如,我发现这个Blogpost 非常有用,它详细描述了内部框架代码及其外部 API 遵循的命名约定。例如int _myPrivateIntVariable 用于其他代码部分的不同情况(骆驼情况、帕斯卡情况)的私有类级变量。根据这个约定,过程级别的变量将是驼峰式,例如int myIntVariable.

因此,根据这一点,当我遍历对象集合时,我将集合命名为复数形式 (items),而迭代中的当前变量根据对象单数形式命名 (@987654326 @)。

有时我在处理对象时,描述我的对象的名词只有一种用于单数和复数的形式(这种情况在我处理德语单词时更常见,但我们也可以在英语单词中出现这种情况)。

所以假设我们有以下代码:

var sheep = new List<Sheep>();
// Adding objects to the collection

foreach (var sheep in sheep)
{
    // Do something with the current sheep
}

由于循环的当前sheepsheep 集合的命名冲突,这段代码显然无法编译。

那么,对于这些产生的名称不会看起来奇怪/丑陋的场合,是否有任何最佳实践? 一种解决方案是在变量名称前加上下划线,但这会与私有类级别成员的约定相冲突。 目前,大多数情况下,我在偶然发现这一点时,会在 *s*ingular 变量中添加一个“S”,因此对于本示例,它将是:foreach (var sheepS in sheep)。 有没有更好的选择?

【问题讨论】:

  • var sheep = new List&lt;Sheep&gt;(); 可以重命名为var sheepCollection...只是一个想法
  • 如果整个 for 循环只跨越几行,我一般使用一个字母的迭代器名称:foreach(var s in sheep)。否则,您可以选择一个通用的迭代器名称,iteminstance 等。
  • 编译器不对变量进行拼写检查。绵羊
  • 有点离题,但也许您应该使用英语而不是德语作为关键字。 codinghorror.com/blog/2009/03/the-ugly-american-programmer.html
  • 这是一个程序而不是一个短篇小说,它是一个集合而不是复数。

标签: c# .net vb.net naming-conventions


【解决方案1】:

我想我会附加一个词来说明它是什么:

var sheepList = new List<Sheep>();
// Adding objects to the collection

foreach (var sheepItem in sheepList)
{
    // Do something with the current sheepItem
}

我会避免使用 Hungarian 样式的前缀或后缀(例如 mSheep 用于“多个”或 iSheep 用于“项目”,或 sheepS 用于“单个” - 尤其是最后一个,因为它也是由于清晰,容易与sheeps) 混淆。并且试图发明一种将其复数的方法(sheeps 表示复数)只会令人困惑。

【讨论】:

  • 是的,这也困扰着我,我也不喜欢匈牙利风格。但是,当您有一个数组或 HashSet 而不是 List 时,将 List 显式添加到绵羊可能会令人困惑
  • @AndreasAdler 我可能会使用CollectionSetItems 作为后缀,具体取决于类型。一般来说,我会说你可以让它匹配你声明它的任何类型(不一定是实现),例如ICollection&lt;Sheep&gt; sheepCollection = new HashSet&lt;Sheep&gt;();
  • 如果你为不同的集合类型使用不同的后缀,那不就是匈牙利符号吗?
  • @AndreasAdler hm,我认为匈牙利表示法使用 缩写前缀 来显示类型,而使用 完整后缀 则有所不同。根据Wikipedia,.NET 约定支持这种观点,并不反对使用它们。
【解决方案2】:

sheep - 对我来说,sheepS 很难读。

我更喜欢 mSheepS,其中 m 代表多个。双 s 看起来有点好笑,但以“马”为例;

int 马 内马 int mHorseS

当然最好的方法是

int manyHorses

取决于您的代码以及您将使用多少次 manyHorses 您可能会在它们之间进行更改,但我强烈推荐 manyHorses、manySheeps 等

【讨论】:

  • 前缀“m”和大写“S”都违背了微软的 .Net 命名约定。
  • 实际上,“m”前缀比我现在的“S”后缀更让我烦恼。
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 2020-01-06
  • 2015-12-21
  • 1970-01-01
相关资源
最近更新 更多