系统命名法怎么学?为什么大公司都不用匈牙利命名法
2020年了,匈牙利命名法的遗毒还在危害人间,是时候彻底摒弃匈牙利命名法了,理由如下:,我来为大家讲解一下关于系统命名法怎么学为什么大公司都不用匈牙利命名法?跟着小编一起来看一看吧!
系统命名法怎么学为什么大公司都不用匈牙利命名法
2020年了,匈牙利命名法的遗毒还在危害人间,是时候彻底摒弃匈牙利命名法了,理由如下:
1.变量的类型由其含义决定。这是最重要的反对理由。比如money的类型就是money_t,比如object_size的类型就是size_t,事实上size_t是unsigned long的类型别名。类型编码进变量名,既多余,也无必要,且不能涵盖所有情况,画蛇添足。
2.缺乏一致可解释性。好的规则应该是一致性可解释的,它应该能够在它的问题集内一致性的应用规则,遵从规则只需无脑执行,Do not let me think,匈牙利不满足,它甚至不能胜任变量命名。
(a) 比如int的前缀到底是i还是n,char的前缀是c还是ch?那const呢?char* 是str?那const char* x[]呢?pcstra?太啰嗦了。
(b) C 的模板表示参数化类型,类型是不确定的,怎么加前缀?匈牙利在C语言是难以实施的,在C 是无法实施的。
(c) MS不仅为基本数据类型定义前缀,还为自定义类型定义前缀,比如h表示句柄,wnd表示窗口,re表示正则,fn表示函数,函数指针pfn?那如果再出现一堆概念,26个字母大概不够用吧。这么复杂的规则确定能记住?确定对项目有帮助?
2.修改类型困难。如果把变量类型编码进变量名,哪天short不够,改成int,岂不是要把所有s_var全改成i_var?而变量改类型也很常见吧。
3.冗余,有违精简原则。好的代码应该是清晰简短的,匈牙利命名法声称利于阅读代码,实际效果恰恰相反。
(a) 每次见到一个变量,比如puiindex,它远不如index明晰,我需要在脑海中先过滤掉pui这个无用的前缀,而实际上这个预处理过程完全多余。
(b) 第一次见到CFont这种类就觉得很奇怪,C是什么?Class首字母吗?为什么一个类型还要加个前缀?把本来通顺的词搞得那么别扭?
(c) 软件强调避免信息冗余,type name已经是一个完整的信息表达式,能准确无误的表达它的含义,在匈牙利命名中,就变成了type type_name; 很显然,type的信息冗余了。
4.业界主流观点反匈牙利。为什么这么说呢?Top开源项目和Top公司没有一个还在使用匈牙利命名法(找出一个算我输),包括STD C库,C 标准库STL没用,说句不好听的,主张匈牙利命名法可能是开源代码看的少。
5.匈牙利命名法是历史的产物,注定进历史的垃圾堆。就像GIT替代SVN一样,技术总在进步,匈牙利出现的时候,我猜想可能是为了弥补IDE的不足,但现在IDE已经进化到鼠标一放上去就能提示变量定义了。
6.MS已经公开宣称放弃匈牙利命名法,而且号召大家不再使用。这个已经足够说服力了,如果它真的那么有效,为什么MS抛弃它?(之前MS推崇经常被挺匈牙利派作为依据,尴尬)
为什么还有那么多人在坚持匈牙利呢?
我给出的答案是“惯性的力量”,而这种惯性是不知不觉的,但惯性阻碍进步,而优秀程序员最本质的要求就是好奇和开放,因循守旧,一昧按老规矩办,甚至失去思辨能力,值得警惕。
反匈牙利命名法又分温和派和激进派,无论是温和派还是激进派,核心观点都是反匈牙利。
有个大V在帖子中说:“感觉作者还是顾忌了大家的情绪,说了一些匈牙利的好话…”然后直言不讳的说挺匈牙利的是代码写的太少了,导致大家过于关注它的态度,而忽视了它的观点,但其实,观点才是重要的,我认为倒不一定是代码写的少,开源代码看的少几乎是一定的,文章中其他的说的都对。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com