我是靠谱客的博主 精明小鸭子,最近开发中收集的这篇文章主要介绍反对匈牙利命名法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

最后

以上就是精明小鸭子为你收集整理的反对匈牙利命名法的全部内容,希望文章能够帮你解决反对匈牙利命名法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部