匈牙利命名法

✍ dations ◷ 2025-07-26 16:16:34 #匈牙利命名法

匈牙利命名法(Hungarian notation)是电脑程序设计中的一种变量命名规则,此命名法又可细分为:系统匈牙利命名法和匈牙利应用命名法。

匈牙利命名法具备语言独立的特性,并且首次在BCPL语言中被大量使用。由于BCPL这种低级语言只有机器码这一种数据内容,因此这种语言本身无法帮助程序员来记住变量的类型。匈牙利命名法通过明确每个变量的资料类型来解决这个问题。

在匈牙利命名法中,一个变量名由一个或多个小写字母开始,这些字母有助于记忆变量的类型和用途,紧跟着的就是程序设计师选择的任何名称。这个后半部分的首字母可以大写,以区别前面的类型指示字母(参见驼峰式大小写)。

原始的匈牙利命名法,现在被称为匈牙利应用命名法,由1972年至1981年在施乐帕洛阿尔托研究中心工作的-程序员查尔斯·西蒙尼发明。此人后来成了微软的总设计师。

这种命名法其实是对于西蒙尼祖籍的一种讽刺。匈牙利人名和大多数其他欧洲人名相比是反过来的,即姓氏在名字的前面。举个例子,英语化的名字“Charles Simonyi”在匈牙利语中原本是“Simonyi Károly”。同样的,在匈牙利命名法中,类型名在实际变量名前,而不是像大多数欧洲的Smalltalk那样,类型放在变量名后,例如aPoint和lastPoint。后者在西蒙尼任职于施乐帕洛阿尔托研究中心时期非常流行。这种命名法的灵感,可能是受波兰表示法的启发。

匈牙利命名法的英文是Hungarian notation,这个词能让许多人记住,因为难发音的辅音字符串有点像部分东欧语言中,辅音丰富的拼写方式,尽管实际上匈牙利语是属于芬兰-乌戈尔语族,而不像斯拉夫语族那样元音丰富。举例来说,零结束字符串的前缀"sz"实际上就是匈牙利字母表中的一个合体字母(参看德语中的ß)。

系统命名法与应用命名法的区别在于前缀的目的。

在系统匈牙利命名法中,前缀代表了变量的实际数据类型。例如:

匈牙利应用命名法不表示实际数据类型,而是给出了变量目的的提示,或者说它代表了什么。

西蒙尼建议的大多数前缀都是自然语义的,但不是所有。下面几个是来自原始论文的:

由于这种命名法通常使用小写字母开头用来助记,但是并没有对助记符本身作规定。有几种被广泛使用的习惯(见下面的示例),但是任意字母组合都可以被使用,只要它们在代码主体中保持一致就可以了。

在使用匈牙利应用命名法的代码中有时候也可能包含系统匈牙利命名法,即在描述被单独以类型方式定义的变量时使用。

每一项示例的代码块表示实际生产环境代码中可能出现的命名,示例后的两项解释分别为含义以及这一示例的前缀是哪一个英文单词的简写

对于指针和数组来说,它们实际上并不是数据类型,因此通常在助记符后面跟着实际元素的类型。

尽管匈牙利命名法可以被应用在任何程序设计语言和环境中,由于微软在C语言项目中,特别是在Microsoft Windows里的大量应用,使得匈牙利命名法的应用大量存在于和Windows相关的领域:

这种命名法又是在C++中被扩展而包含变量的作用域,由一个下划线隔开:

(其中一些只适用于系统匈牙利命名法)支持者声称匈牙利命名法的好处包括:

批评者认为:

.NET Framework,微软新的软件开发平台,除了接口类型一般不适用匈牙利命名法。在.NET中,习惯在接口类型前放一个I(例如Windows Forms中的IButtonControl接口。).NET Framework指导方针建议程序员不要用匈牙利命名法,但是没有指明不要用系统匈牙利命名法还是匈牙利应用命名法,或者是两者都不要用。但在JETBrains公司旗下C#编辑器中,匈牙利命名法却属于建议使用的命名法(.net使用C#语言开发)与此对比,Java的标准库中连接口类型也不加前缀。

相关

  • 仙台市博物馆仙台市博物馆(日语:仙台市博物館/せんだいあひはくぶつかん )是位于日本仙台市市中心西部广濑川右岸的一座仙台市立博物馆。在江户时代这里曾是仙台城三之丸,现在是青叶山公园的
  • 姹女姹女,是道教外丹派的术语,意思是指朱砂,化学术语为“硫化汞”。一般都与“婴儿”合用。“婴儿”指的其实是“铅”。当时的道教利用这些特殊的术语,把化学变化写成一些玄之又玄的
  • 刘义庆刘义庆(403年-444年2月26日),彭城郡彭城县(今江苏省徐州市)人,刘宋宗室,武帝刘裕之侄,为著名文学家、政治家。本长沙王刘道邻之子,过继给刘裕另一弟弟刘道规,世袭临川王。曾集士人门客
  • 德米特里·丹尼洛维奇·列柳申科德米特里·丹尼洛维奇·列柳申科(俄语:Дми́трий Дани́лович Лелюше́нко,1901年10月20日(11月2日)-1987年7月20日),苏联大将,战时近卫坦克第四集团军司令
  • 约翰二世 (布列塔尼)约翰二世 Jean II(1239年1月3日~1305年11月18日)法国封建领主,布列塔尼公爵(1286年~1305年在位)和里士满伯爵(英国封号,1268年起)。布列塔尼公爵约翰一世之子,母亲为纳瓦拉公主布朗歇
  • 河姆渡遗址博物馆坐标:29°57′52.15″N 121°20′42.11″E / 29.9644861°N 121.3450306°E / 29.9644861; 121.3450306河姆渡遗址博物馆是浙江省余姚市一座以河姆渡文化为主题的博物馆。博
  • 1962-63 NBA赛季1962-63赛季是NBA第17个赛季,波士顿凯尔特人4:2击败洛杉矶湖人获得总冠军。(1)-(4)种子排名NBA最佳阵容一队:NBA最佳阵容二队:NBA最佳新秀阵容:
  • 英格兰超级联赛参赛球队列表英格兰超级联赛(Premier League)成立于1992年2月20日,其前身是英格兰足球甲级联赛。首届英格兰超级联赛于1992年8月15日正式展开,参赛球队为原来1991/92赛季英格兰足球甲级联赛的排名首19位的球队,另加上新升级的伊普斯维奇、米德尔斯堡和布莱克本流浪者,总共22支球队。其后每一届都是有22支球队参赛,排名最尾三队降级甲级联赛,而甲组首三名球队则升上超级联赛比赛。直至1995/96赛季,英格兰赛会宣布球队数目由22队减至20队,只有两支球队从英甲升级英超,包括英甲冠军米德尔斯堡和附加
  • 大分自动车道 */?)是起于佐贺县鸟栖市鸟栖系统交流道 ,终于大分县大分市大分米良交流道 ,总距离134.5公里的高速公路(高速自动车国道)。略称为大分道(大分道/おおいたどう,OITA EXPWY)。高速公路路线编号在鸟栖系统交流道 - 日出系统交流道间与长崎自动车道、长崎出岛道路被编为 E34 、日出系统交流道 - 大分米良交流道间与东九州自动车道(北九州系统交流道 - 清武系统交流道间)、宫崎自动车道被编为 E10 。
  • 卡罗琳·弗莱彻卡罗琳·弗莱彻(英语:Caroline Fletcher,1906年11月22日-1998年4月3日),美国女子跳水运动员。她曾在17岁时代表美国参加1924年夏季奥林匹克运动会跳水比赛,获得女子3米跳板铜牌。