VBA中使用匈牙利命名法可以吗?

6

在 .Net 中,我不使用匈牙利命名法(str、int 前缀),但在 VBA 中,我仍然发现它很有用,因为在那里更难看到类型。

这样做是不好的吗?是不必要的吗?也许我漏掉了什么。

我非常感谢任何反馈。我已经思考了一段时间。

谢谢大家。


我希望能够直接获得有关在VBA中使用它的更多答案。我在StackOverflow上看到很多高声望分数的人(比如下面链接中的Joe)在他们的VBA答案中使用匈牙利命名法。这一定有原因。https://dev59.com/uHVD5IYBdhLWcg3wAWoO - KennerL90
我认为你经常看到它,因为它是20世纪90年代Windows程序员文化的一部分,那时(当然是 .NET 之前)VB非常流行,所以它自然成为VB和VBA程序员文化的一部分。在 VBA 中没有任何功能使“系统匈牙利命名法”(请参见 Earlz 下面发布的链接:http://www.joelonsoftware.com/articles/Wrong.html)更“合适”。这绝对是“不必要”的,从技术上讲,这使它变得“糟糕”,但是就代码质量而言,良好的代码得分10分,加上系统匈牙利命名法的良好代码得分9.99分。 - jtolle
我认为VBA比其他目前流行的语言更适合使用“应用程序匈牙利”命名法,特别是与Excel结合使用时。大量使用“Variant”数据类型,加上定义类的不便之处,意味着在变量名称中放置语义信息更有意义。 - jtolle
4个回答

6
我认为这种匈牙利符号法在几乎所有编程语言中都是万恶之源。有些人说它对于非常动态的语言很方便。但是,在99%的情况下,将类型缩写前缀添加到变量名中是多余的,只会导致丑陋的代码。
请参见为什么不应该使用匈牙利符号法?

我的问题是在VBA中没有一种简单的方法来查看类型。我是不是错过了什么?或者也许我应该使用更好的名称? - KennerL90
2
嗯,当然name永远不会是整数,count也绝对不会是字符串。 - Earlz
+1 无法反驳你的观点,匈牙利命名法确实会导致丑陋的代码。 - amelvin

5
我建议您选择一些比类型更高级的东西,这样您就可以看到事物的目的是什么。因此,不要称某物为字符串,而应称其为名称或地址;不要称整数为int,而应称其为计数或坐标等。
(我更喜欢使用后缀而不是前缀,但这是风格和品味的问题。)

听起来很有趣。您介意给我一些例子吗? :-) - KennerL90
2
+1,这正是Joel在这里谈论的内容http://www.joelonsoftware.com/articles/Wrong.html - Earlz
@KennerL90:我在VB方面非常糟糕。我最后一次编写任何类型的Basic是在1991年,而且是完全不同的方言。但是这个想法是,你可以将变量名从f_dwX(对象字段双字类型x)改为x_coord;变量的目的比其类型更重要,也更稳定。 - Donal Fellows

4

我总是在VBA中使用一个或两个字母的前缀。我敢肯定我是唯一一个愿意承认这点的人,但我想有人需要与众不同。

我的VBA代码大约有1800万行,其中我合作完成了大约1000行。如果没有其他人会看到我的代码,那么我可以自由地使用我喜欢的惯例。但是如果其他人将要处理你的代码,你应该达成共识并统一惯例。

我喜欢这样做是因为它让我变量名更简短。我可以使用FileNumber和FileName,也可以使用lFile和sFile。我认为读者对这两种方式都不会感到困难。这还帮助我使用保留字作为变量。如果我想把Replace作为变量名,我不能这么做。但是我可以使用sReplace或lReplace。


谢谢回复。关于这些回复的事情是,我从来没有见过任何人在 .Net 代码中使用匈牙利命名法,但是,我从来没有见过任何人在 VBA 中不使用匈牙利命名法。所以我很惊讶你是唯一一个回复说你在 VBA 中使用它的人。我感激所有的答案,但我不确定我真的有更强烈的意见要做什么。 - KennerL90
1
我从未听过任何 .net 程序员使用任何类型的前缀。我一直打算学习 C# 四年了,但还没有实现。一旦我学会了(这是不可避免的),也许我会在 VBA 中改变我的习惯。或者也许到我真正学会 C# 的时候,VBA 已经死了 :) - Dick Kusleika

0

如果您公司的样式是使用匈牙利命名法,那么使用它就没有问题 - 政策就是政策。有很多工具可以帮助强制执行编码命名惯例(例如 C# 的 Stylecop),所以如果允许的话,您可以继续前进。

基本上,拥有标准是个好主意 - 但这些标准取决于您所在的公司。如果您有一些权力,可以尝试推行微软当前推广的标准 - 但是如果您有大量遗留代码,这将涉及到大量昂贵的重构,而且收益有限。

我建议您在新项目中摒弃匈牙利命名法(可能通过使用代码分析工具),但对于旧代码要保持实用主义。


1
是的,唯一比匈牙利项目更糟糕的是一半是匈牙利式的,另一半不是。无论如何都要保持一致。 - Earlz
必须赞同一致性是关键的观点。 - amelvin

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