您遵循什么命名指南?, ,作者说:

另外,我更喜欢使用查尔斯·西米尼(Charles Simonyi)的匈牙利符号进行编码。

我遇到了几位仍然喜欢使用匈牙利的程序员,其中大部分是Petzold/Systems匈牙利风味。思考 dwLength = strlen(lpszName).

我读了 使错误的代码看起来不错, ,我理解匈牙利应用程序的基本原理,其中域名信息包含在变量名称中。但是我不理解将编译器类型添加到名称时的值。

为什么程序员仍然坚持使用这种符号?只是惯性吗?有什么好处超过了可读性的降低?人们在阅读代码时会学会忽略装饰器吗?如果是,他们如何继续增加价值?

编辑:很多答案正在解释历史,或者为什么它不再相关,这两者都在我引用的文章中涵盖。

我真的很想听听任何仍然使用它的人。你为什么使用它?是您的标准吗?如果不需要,您会使用它吗?您会在一个新项目上使用它吗?您认为优势是什么?

有帮助吗?

解决方案

目前,我仍然使用匈牙利语 正是三个原因, 明智地避免 它为其他一切:

  1. 在进行维护时,要与现有代码库一致。
  2. 对于控件,例如。 “ txtfirstname”。我们通常需要区分(说)“ firstName”值和“ firstName”控件。匈牙利人提供了一种方便的方法。当然,我可以键入“ firstNametextbox”,但是“ txtfirstname”同样易于理解,并且字符更少。此外,使用匈牙利的手段是易于查找相同类型的控件,并且通常在IDE中按名称进行分组。
  3. 当两个变量保持相同的值,但按类型差异。例如,一旦将其解析与整数中,用户实际键入的值和“ Intvalue”实际键入的值。

我当然不想将我的想法设置为最佳实践,但是我遵循这些规则,因为经验告诉我,它偶尔使用匈牙利福利代码可维护性,但花费很少。就是说,我不断地回顾自己的实践,因此随着我的想法的发展,很可能会做一些不同的事情。


更新:

我刚刚读了 有见地的文章 埃里克·利珀特(Eric Lippert)解释了匈牙利如何帮助使错误的代码看起来不对。值得阅读。

其他提示

我不是使用匈牙利符号的忠实拥护者,但以这种方式考虑:

  • 我们还可以注意到,找到代码中的文本框的字符串更快:通过在您的搜索框中键入“ TXT”。

不像相反,每个元素都有自己的名字。找到想要去的地方可能会慢一点,对吗?

当我们想引用订单清单时,DDL也是如此,它更容易? :)

人们不会花太多时间来寻找这个元素在哪里。

前缀的使用不适用于C#等现代语言编译器,而是 它是可用的(可读) 对于人类。

匈牙利应用程序(表示无法通过类型系统表达的对象的语义属性的标签)是一种合理的方法,可以在使用1980年代初期的弱型语言时处理一些常见错误。他们在当今强烈的语言中几乎没有目的。

匈牙利系统(用于冗余的标签表示对象已声明的类型)从未达到任何目的,除非在代码库上施加表面上均匀的外观。它是由非技术经理和经验不足的程序员创建和传播的,他们误解了匈牙利应用程序的意图,并认为复杂的编码准则可以增强代码质量。

两种样式都起源于微软。这些天,微软的 命名约定 明确地说“不要使用匈牙利符号”。

如果您想出正确的前缀系统,则可以散布钥匙的磨损,这将减少更换键盘上的支出。


我想我可以对此进行扩展。我在工作场所使用了SH,最后十年左右(因为它是我们的标准)。它从未帮助解决问题。

另一方面,我在“家庭代码”中使用了未经修剪但命名良好的变量,几乎同样长。我从未错过SH。

在这两个地方,我都编写了需要固定尺寸原始类型的协议代码。这是我能想到的最有益的用例。我能告诉我何时用SH写作并没有阻碍我写作,这并没有帮助我。

因此,总而言之,我唯一可以看到的是键盘上的磨损。

实际上,我开始在本月写的新代码中使用SH。

我的作业涉及在JS中重写一些PERL代码,以便可以将其移至我们Web应用程序的客户端。在Perl中,通常不需要SH,因为Sigils($ string,@array,%哈希)。

在JavaScript中,我发现SH跟踪数据结构的类型是无价的。例如,

var oRowData = aoTableData[iRow];

这使用整数索引从对象数组中检索对象。坚持此公约为我节省了很多时间查找数据类型。另外,您可以超载简洁的变量名称(oRow VS. iRow).

当您使用弱打字语言具有复杂的代码时,TL; dr:SH可能会很棒。但是,如果您的IDE可以跟踪类型,请更喜欢。

我也很好奇地看到理由。我们知道为什么他们过去使用它:缺乏IDE支持类型信息。但现在?简而言之,我认为这是一种传统。 C ++代码 总是 看起来像这样,为什么要改变事物?此外,当您建立在使用匈牙利符号的先前代码之上时,当您突然停止使用它时,它看起来很奇怪...

匈牙利符号系统实际上有点像是对“类型”一词的误解。系统开发人员实际上将其视为编译器类型(Word,byte,String,...),而不是Apps域类型(行索引,列索引,...)。

但是我想,每个开发人员都经历了当时似乎是一个好主意的几个风格阶段(并且前缀类型似乎对新手来说都是一个好主意),然后才陷入陷阱(更改类型,创建新的,有意义的前缀, ETC)。因此,我想有一种惯性:来自开发人员不会变得更好,并意识到为什么这是一个糟糕的选择,开发人员遵守了授权实践的编码标准以及使用的人使用的人 <windows.h>. 。对于微软而言,要清除前缀符号(在许多地方是不正确的:wparam?),这太成本太高了。

匈牙利人缺少一件事。匈牙利符号实际上可以很好地完成自动完成。

假设您有一个变量,并且名称是毫无意义的。

说你忘记了变量的名称

它可能是声明的高度,或者是蒙斯特高的或测量的蒙斯特

您希望能够键入字母,并向您提供一些变量名称。

知道月的高度是一个INT,您只需I键入I和VOILA即可。

省时间。

许可以下: CC-BY-SA归因
scroll top