我知道这个问题已经被问了一点,从表面上看,这个问题没有明确的是或否答案,但我仍然对某些事情感到有些困惑。
通常当我编程时,我会遵循一些关于前缀的规则:
- m_ 在成员面前
- p_ 在属性前面
- s_ 在 static 前面
- a_ 在参数前面
- l_ 在局部变量前面
我现在得到了一份新工作,我注意到代码中没有使用前缀。我问为什么,他们回答说 IDE 完成了跟踪什么是成员变量和什么是局部变量的所有工作。现在我在想,可能是这样,但是使用前缀不是更容易吗?
我的意思是,如果我有一个成员、一个静态变量和一个名为“robot”的局部变量,那么在编写方法时引用它会不会很痛苦?这可能是一个不切实际的例子,但我喜欢在我的脑海里有一个很好的规则集,我可以始终如一地应用它,即使是在不切实际的情况下。
这个例子是否证明使用匈牙利符号是合理的?
我想我会制作一个优点/缺点列表并在我了解更多信息时对其进行编辑。
反对匈牙利语的论点:
Class.Robot
或者Robot
this.robot
robot
不需要匈牙利语。
柜台:
仍然存在不一致之处,机器人可能以不同的方法表示不同的东西。为了保持一致,您应该在每个 Robot 变量之前添加 Class 或 this(或无)前缀。
最重要的是,假设您要访问静态变量 Strawberry,您怎么知道未定义名为 Strawberry 的成员变量?也许它是在另一个你看不到的文件中定义的,所以你可能会得到意想不到的结果。现在您可能会说这可以通过 IDE 看到,但我认为使用前缀更好,因为您可以看到您所引用的内容,而您可能会错过 IDE 告诉您的内容。当然,您也可以使用 this/Classname 前缀,但这违背了不使用匈牙利符号的目的。
反对匈牙利语的论点:
如果在字段和变量的命名中使用匈牙利符号,则会违反此规则。匈牙利符号的使用在 C++ 代码中变得普遍,但 C# 的趋势是为变量使用更长、更具描述性的名称,这些名称不是基于变量的类型,而是描述变量的用途。
柜台:
我提到的前缀不是基于变量的类型,前缀确实指定了变量的用途。
反对匈牙利语的论点:
现代代码编辑器(例如 Visual Studio)可以轻松识别变量或字段的类型信息,通常通过将鼠标光标悬停在变量名称上。这减少了对匈牙利符号的需求。
柜台:
虽然这是真的,但我自己几乎从不将鼠标悬停在变量名上方,除非发生错误。相反,使用匈牙利表示法,您可以立即看到变量在类中的位置。
评论:
Microsoft 不建议对文件名使用匈牙利符号吗?我读到用 I 前缀接口文件是一种约定,这是匈牙利符号的一种形式。虽然这与我上面的问题没有直接关系,但它确实提出了匈牙利符号有时被推荐的观点。