匈牙利命名法



  匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。

  据说这种命名法是一位叫 Charles Simonyi 的匈牙利程序员发明的,后来他在微软呆了几年,于是这种命名法就通过微软的各种产品和文档资料向龙头传播开了。大部分程序员不管自己使用什么软件进行开发,或多或少都使用了这种命名法。

  举例来说,表单的名称为form,那么在匈牙利命名法中可以简写为frm,则当表单变量名称为Switchboard时,变量全称应该为 frmSwitchboard。这样可以很容易从变量名看出Switchboard是一个表单,同样,如果此变量类型为标签,那么就应命名成 lblSwitchboard。可以看出,匈牙利命名法非常便于记忆,而且使变量名非常清晰易懂,这样,增强了代码的可读性,方便各程序员之间相互交流代码。下面,我们分别来看一下应用性匈牙利命名法和系统性匈牙利命名法。

匈牙利命名法

  1. 应用型匈牙利命名法

  Simonyi 的匈牙利命名法的原型在微软公司内部更初被叫做“应用型匈牙利命名法”(Apps Hungarian),因为它是在“应用程序部”(Applications Division)中使用的,也就是用在 Word 和 Excel 身上。在 Excel 的源码中,你可以看到大量的 rw 和 col 。

  使用这种“应用型匈牙利命名法”,我们可以在看到变量后很快理解其含义,并很容易发现代码中的问题。

  例如在代码中看到 xl = cb,

  xl 表示“相对于页面的横坐标”,horizontal coordinates relatives to the layout;cb 表示“字节个数”,count of bytes

  显然是有问题的,虽然 xl 和 cb 都是整数,但是这二者之间的赋值基本一定会导致 bug。

  2. 系统型匈牙利命名法

  然而,一定程度上由于 Simonyi 自己在编写文档时,用了“type”这个词,而不是“kind”,于是被人误以为 Simonyi 指的是数据类型。尽管 Simonyi 很详细、很准确地解释了他所说的“type”到底是什么意思。可惜于事无补,危害已经酿成了。悲剧的结果就是产生了我们现在熟悉的“系统型匈牙利命名法”(System Hungarian)。

  还是上面的例子,改用“系统型匈牙利命名法”以后,可以改成 nWidth = nCount,看起来好像还不错哈~

  bug 就是这样隐藏起来的。

  “应用型匈牙利命名法”的前缀是非常有用的、有含义的,比如:

  “ix” 表示数组的索引值(index)

  “c” 表示一个计数器(count)

  “d” 表示两个数量之间的差(difference),“dx” 就可以表示宽度

  “系统性匈牙利命名法”的前缀就差远了,比如

  “l” 表示长整型(long)

  “ul” 表示无符号长整型(unsigned long)

  “dw” 表示双精度值(double word),这实际上也是一个无符号的长整型

  这种差别虽然细微,但是完全误解了 Simonyi 的意图和做法。“系统型匈牙利命名法”传播的又远又广,在 Windows 编程文档中,它是标准的变量命名法。难怪很多人都觉得匈牙利命名法很奇怪、很别扭。



上一篇:文艺范的名字
商标注册排查
驳回风险评估
商标查询
欢迎拨打先知对咨询电话:
010-56018888

您也可以咨询我们的在线客服
在线咨询 QQ咨询