匈牙利命名法
匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。
据说这种命名法是一位叫 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 编程文档中,它是标准的变量命名法。难怪很多人都觉得匈牙利命名法很奇怪、很别扭。
- 相关文章
- • 什么样的商铺名字才是好名字
- • 好消息:吉首企业名称核准实现全
- • 常用繁体字大全
- • 笑傲江湖OL好听的名字大全
- • 产品命名要素
- • 趵突泉名字的来历
- • 2014年11月生肖运势大解析
- • 公司起名方法
- • 小吃招牌名字大全2017版
- • 2014马年八月生的宝宝命名方略
- 推荐阅读
- • 如何进行品牌命名更有效率
- • 学校体育馆如何起名
- • 如何分析品牌资产
- • 奶制品饮料如何起名
- • 创意产业园起名方法
- • 如何选择品牌命名公司
- • 童装品牌如何起名
- • 有机蔬菜基地取名
- • 中药面膜起名字大全集
- • 医疗器械品牌起名
-
- 先知公司测名系统
- 客户评价
-
新辣道董事长李剑先知中国在文化方面的竞争力给我留下了深刻印象,理论清晰、经验丰富、很有智慧。通过专业的词语战略+强大原型,后期的形象落地 为品牌积累了非常强的势能,为企业的持续发展提供源源不绝的动力。
-
饿了么星选外卖总经理魏总先知中国的词语战略+强大原型非常实用,实际证明好名字确实是品牌要素中更重要的部分,后期的全案策划给品牌发展提供更大的支持。尤其在整合创 意及设计方面,让品牌形成了系统的竞争力。
-
远洋集团品牌总监金悦在先知中国合作过程中,团队的专业能力及服务态度都非常值得肯定,名称及设计的后期应用效果也非常有竞争力,为远洋养老项目及 LAVIE的售前、售中和售后都提供了强有力的支持。