资讯专栏INFORMATION COLUMN

匈牙利命名法

weij / 1082人阅读

摘要:文章开头的两个例子的风格来自于系统型匈牙利命名法。应用型匈牙利命名法前缀体现自然语义,主要是说明变量的应用属性或业务属性,抽象层次较高,如若简称为,简称为。对于系统匈牙利命名法来说,是没有必要的。

从事Windows下C/C++编程的人很可能遇到过类似nCountstPerson这类风格的命名,这类风格的命名方式即为匈牙利命名法。

匈牙利命名法起源

匈牙利命名法(HungarianNotation)是由匈牙利裔美国人Charles Simony发明的,由于其单词排列顺序类似古怪的匈牙利姓名而得名。

实际上Charles Simony发明的是应用型匈牙利命名法,由于被曲解、以讹传讹,形成了我们常见的系统型匈牙利命名法。文章开头的两个例子的风格来自于系统型匈牙利命名法。

这段历史在Joel on Software的《讓錯的程式看得出錯》有详细的介绍。

匈牙利命名法的构造

应用型匈牙利命名法和系统型匈牙利命名法都是通过前缀+对象描述的形式命名。

应用型匈牙利命名法
前缀体现自然语义,主要是说明变量的应用属性或业务属性,抽象层次较高,如:

若 Fahrenheit简称为fah,Celsius 简称为cel。下面的代码我们一眼就能看出问题:
int fahTemp = celThermometer;
因为华氏温度和摄氏温度肯定不能直接赋值,它们之间有转换关系,所以代码逻辑错误。

系统型匈牙利命名法
而匈牙利系统命名法的前缀是为了说明变量的系统属性,最常用的是变量类型,上面的例子改写为:
int iTemp = iThermometer;

i标识变量类型是int,我们很难看出其中的问题。

系统型匈牙利命名法的缺点

Windows开发的圣经《Windows 程序设计》第一版大量使用了匈牙利命名法,所以系统型匈牙利命名法是Windows开发的事实标准。但随后的反对也愈演愈烈,在.net第一次发布时达到了高潮。微软在.net框架的《通用命名约定》中明确说明不建议使用匈牙利命名法。到现在,除了一些遗产代码,新的代码已经鲜见系统型匈牙利命名法了,而且《Windows 程序设计》第六版也不怎么使用匈牙利命名法了。

我认为其的几个缺点:

IDE流行,特殊标注类型已没有必要
有图有真相:

图中是Rust的代码段,guess后面的String是IDE推断出的,现代的工具已经很发达,能有效避免这种纯手工的标注。
其他语言同理。

抽象层次低,对问题排查没有用处

类型不一致导致的问题,在大多数语言的编译器都会产生错误或警告,人工做编译器的工作,没有必要。如果出错,大部分错误都是逻辑错误,这种类型标注帮不了什么忙。

适用面窄,跟不上发展

该命名法对于C++引入模板容器来说就是灾难。引入的容器、迭代器等等很多,单字母已经无法表示,姑且用vec表示std::vector,那该模板类的实例std::vector怎么表示?
即使能表示,std::vector>>这个又怎么表示?

世上没有解决不了的问题,上述的问题肯定也是可以解决的,只要制定相应的规则即可。问题是:这个成本能得到多大的回报。对于系统匈牙利命名法来说,是没有必要的。

请关注我的公众号哦。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61289.html

相关文章

  • JavaScript知识架构学习路径(一)- 变量篇

    摘要:在此,我们首先根据变量的作用域,将变量划分为三级,具体是全局变量局部变量和参数变量。 【摘要】本文是专为JavaScript入门者而总结的,总体上将JavaScript的基础部分分成了九大块,分别是变量、运算符、数组、流程控制结构、字符串函数、函数基础、DOM操作基础、文档对象模型DOM和正则表达式。 【关键字】变量、运算符、数组、流程控制结构、函数、DOM、正则表达式。 本篇文章的主...

    toddmark 评论0 收藏0
  • JS学习笔记(第24章)(最佳实践)

    摘要:大多数情况下,可以是同局部变量完成相同的事情而不引入新的作用域。选择正确的方法避免不必要的属性查找一旦多次用到属性对象,应该将其存储在局部变量中。尽可能多的使用局部变量将属性查找替换为值查找。 1、可维护性 1.1 可维护代码特征 1. 可理解性 2. 直观性 3. 可适应性 4. 可扩展性 5. 可调试性 1.2 代码约定 1、可读性(代码缩进和代码注释) 2、变量和函数命名 变量...

    cnTomato 评论0 收藏0
  • Python 工匠:善用变量来改善代码质量

    摘要:变量用的好或不好,和代码质量有着非常重要的联系。简而言之,匈牙利命名法就是把变量的类型缩写,放到变量名的最前面。很多情况下,使用匈牙利命名法是个不错的主意,因为它可以改善你的代码可读性,尤其在那些变量众多同一类型多次出现时。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏作者:朱雷 | 腾讯IEG高级工程师 『Python 工匠』是什么?...

    seanHai 评论0 收藏0
  • JavaScript核心语-变量与常量

    摘要:注意在代码中,必须声明一个变量,这个变量才能被使用。只声明为初始化值,变量的值自动取值为。常量与变量相似,同样用于存储信息。只是常量的数据一旦被定义,便不能修改。常量名通常全大写新增了声明常量的关键字。如果省略,会认为这是一个变量。 JavaScript变量 变量是什么 定义:变量是存储数据信息的容器。注意:.1 在JavaScript代码中,必须声明一个变量,这个变量才能被使用。.2...

    lieeps 评论0 收藏0
  • javascript 命名规范

    摘要:下面是整理的几种命名规则匈牙利命名法类型前缀这个只在定义变量的时候用,函数等不需要首字母大写驼峰命名小驼峰命名法第一个单词以小写字母开始,后面单词首字母大写,例如。大驼峰命名法每一个单词首字母都采用大写,例如。 命名规范及必要性——这里只说javascript命名 可读性——能看懂 规范性——符合规则 写代码时间久之后,我们发现,在项目中要给各种各样的地方起名字。变量、参数、id等...

    Tamic 评论0 收藏0

发表评论

0条评论

weij

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<