记得在 Windows 出现之初,微软就大力提倡所谓的匈牙利符号。此外,许多编程公司已经将这个工具作为解决所有开发问题的灵丹妙药。
问题 - 我们现在有什么匈牙利符号?死了,没死?微软对此有何看法?有任何官方/非官方建议吗?
UPD1:
这里的同事都归结为匈牙利符号允许变量名具有变量类型的事实。但事实并非如此。如果有人需要在变量名中包含这个变量的类型,那么这个就很简单了。您只需要在变量名称中包含变量的类型。不仅仅是“a”,还有“a_int”。另一方面,匈牙利符号声称是对呼叫功能的描述。对于 WinAPI 和 MFC 函数尤其如此。所以事实证明 GetDataFromPromDromStrem 这只是最体面的。小写和大写字母组成的栅栏据说使程序维护更容易。没有多少年过去了,似乎连微软都不记得这种工艺了。
UPD2:
然后我就纳闷了,就去俄罗斯维基百科。不,他们什么也没听到。
说到这里,我已经不解了,就去俄罗斯维基百科。是的,他们听说了。
应用程序的有意义的前缀
匈牙利符号:Префикс Сокращение от Смысл Пример i index Индекс int ix; Array[ix] = 10; d delta Разница между значениями int a, b; ... dba = b - a; n number Количество size_t nFound = 0; a argument Аргумент SomeClass::SomeClass(int aX) : x(aX) {}
这是 SO 网站上一个过于聪明的格式化程序,它删除了字符串中的空格,因此无法迁移表。但是您可以查看俄语维基百科。
一般来说,没有人会说 delta 或 number 是变量类型。这不是一种类型,而是一种可变功能。此外,这种方法被转移到对 WinAPI 的调用中,在那里,在每个调用名称中,他们都试图坚持这个调用的功能。
我只能表达我的个人观点——即使是在MS中也几乎没有任何官方立场。这仍然不是世界范围内的某种全球性事物,而只是命名变量的众多方法之一。
所以,匈牙利符号是一件很棒的事情。它确实提高了程序的可维护性。了解变量是什么对于理解程序非常有帮助。但是,如果对于 C,当然可以建议,在 C++ 的情况下,情况会更加复杂。随着类库和模板(尤其是标准库)的积极使用,匈牙利符号开始被忽略。应该怎么称呼
shared_ptr<unordered_map<unsigned, string>>?神秘。即使使用普通字符串,符号也会过大。通常的字符串是
sz. 宽让wsz。指向字符串的指针呢?好吧,让我们称他们为pszandpwsz。但是没有终止 null 的字符数组呢?局势似乎已经开始失控了。然后突然发现我们仍然需要char32_t线路,一切最终都走下坡路。结果,C++ 程序中没有那么多琐碎的变量,而且在大多数情况下,它们不值得用前缀命名。就个人而言,我有时会在最简单的情况下使用这种表示法,例如
nItems、hFile或szMessage,但一般来说,这种表示法对 C++ 几乎没有用处。更新
我听到了一件令人惊奇的事情,事实证明,匈牙利符号不是类型前缀,而只是骆驼格式的有意义的命名。也就是说,像
OpenClipboard或CreateNamedPipe这样的名称只是匈牙利符号。但是新手程序员不理解深层思想并将所有内容都简化为类型前缀。然后我就纳闷了,去了俄罗斯的维基百科。不,他们什么也没听到。大概,新手程序员写了一篇文章。我去了英语- 同样的事情。打开谷歌,输入“匈牙利符号”——到处都是关于类型的。事实证明,微软也写错了一切。麻烦...
更新 2
关于正确的匈牙利表示法是指变量的用途,而不是其类型的主题。是的,最初有人尝试以这种形式使用它,但坦率地说,它看起来很可怜。太多的东西被标记为变量,并且很难挑选出常用的。好吧,除了循环变量之外,即便如此,它们
i, j, k也是从 Fortran 66 开始的。数组索引——也许我不记得有一个单独的变量会被分配给数组索引的情况。无论您在哪里看,方括号都是表达式或循环变量。很明显,这个前缀是为了炫耀而被某人折磨的。
是的,将坐标差异称为
dx或是很自然的dy,但为此您不需要发明特殊的前缀。这是一个自然的名字,就像循环变量一样i。rowFirst和- 与匈牙利语相同colName,但显然没有必要将其正式化。所以让我们分开 - 有一个正式的匈牙利符号,其中前缀准确地表示变量的类型,并且有一些伪匈牙利变体。好吧,例如,我在程序中写
这就是所谓的骆驼符号。但是如果有很多不同的这样的变量,并且它们在很多地方被使用,那么我会以 , 等形式
scriptCurrent给出scriptLastLoaded名称scriptSpawned。它看起来像匈牙利符号,但不可能将其形式化,因为这样的前缀列表根本无法学习。声称 MS 毁了如此美妙的 Real Hungarian Notation 完全是胡说八道。他们救了她。他们抛弃了最初完全不可行的想法,并在此基础上将可以形式化的东西形式化。
PS关于评论中的文章。乔尔写了很多,但不要把他当作绝对真理的灯塔。他有足够多的可疑言论,这篇文章就是一个很好的例子。