反对匈牙利命名法

2020年了,匈牙利命名法的遗毒还在危害人间,是时候彻底摒弃匈牙利命名法了,理由如下:

  • 变量的类型由其含义决定。这是最重要的反对理由。比如money的类型就是money_t,比如object_size的类型就是size_t,事实上size_t是unsigned long的类型别名。类型编码进变量名,既多余,也无必要,且不能涵盖所有情况,画蛇添足。

  • 缺乏一致可解释性。好的规则应该是一致性可解释的,它应该能够在它的问题集内一致性的应用规则,遵从规则只需无脑执行,Do not let me think,匈牙利不满足,它甚至不能胜任变量命名。

    • 比如int的前缀到底是i还是n,char的前缀是c还是ch?那const呢?char* 是str?那const char* x[]呢?pcstra?太啰嗦了。

    • C++的模板表示参数化类型,类型是不确定的,怎么加前缀?匈牙利在C语言是难以实施的,在C++是无法实施的。

    • MS不仅为基本数据类型定义前缀,还为自定义类型定义前缀,比如h表示句柄,wnd表示窗口,re表示正则,fn表示函数,函数指针pfn?那如果再出现一堆概念,26个字母大概不够用吧。这么复杂的规则确定能记住?确定对项目有帮助?

  • 修改类型困难。如果把变量类型编码进变量名,哪天short不够,改成int,岂不是要把所有s_var全改成i_var?而变量改类型也很常见吧。

  • 冗余,有违精简原则。好的代码应该是清晰简短的,匈牙利命名法声称利于阅读代码,实际效果恰恰相反。

    • 每次见到一个变量,比如puiindex,它远不如index明晰,我需要在脑海中先过滤掉pui这个无用的前缀,而实际上这个预处理过程完全多余。

    • 第一次见到CFont这种类就觉得很奇怪,C是什么?Class首字母吗?为什么一个类型还要加个前缀?把本来通顺的词搞得那么别扭?

    • 软件强调避免信息冗余,type name已经是一个完整的信息表达式,能准确无误的表达它的含义,在匈牙利命名中,就变成了type type_name; 很显然,type的信息冗余了。

  • 业界主流观点反匈牙利。为什么这么说呢?Top开源项目和Top公司没有一个还在使用匈牙利命名法(找出一个算我输),包括STD C库,C++标准库STL没用,说句不好听的,主张匈牙利命名法可能是开源代码看的少。

  • 匈牙利命名法是历史的产物,注定进历史的垃圾堆。就像GIT替代SVN一样,技术总在进步,匈牙利出现的时候,我猜想可能是为了弥补IDE的不足,但现在IDE已经进化到鼠标一放上去就能提示变量定义了。

  • MS已经公开宣称放弃匈牙利命名法,而且号召大家不再使用。这个已经足够说服力了,如果它真的那么有效,为什么MS抛弃它?(之前MS推崇经常被挺匈牙利派作为依据,尴尬)

为什么还有那么多人在坚持匈牙利呢?

我给出的答案是“惯性的力量”,而这种惯性是不知不觉的,但惯性阻碍进步,而优秀程序员最本质的要求就是好奇和开放,因循守旧,一昧按老规矩办,甚至失去思辨能力,值得警惕。

反匈牙利命名法又分温和派和激进派,无论是温和派还是激进派,核心观点都是反匈牙利。

有个大V在帖子中说:“感觉作者还是顾忌了大家的情绪,说了一些匈牙利的好话…”然后直言不讳的说挺匈牙利的是代码写的太少了,导致大家过于关注它的态度,而忽视了它的观点,但其实,观点才是重要的,我认为倒不一定是代码写的少,开源代码看的少几乎是一定的,文章中其他的说的都对。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值