匈牙利命名法对程序员有百弊而无一利。

cxz7531 2010-04-23 01:27:01
初学MFC的人,好像都有种感觉,被长长的变量名称弄得昏头转向,但两年后回过头一看,不就是那100多个类吗?
QT类库比它大得多,但学QT如行云流水,感觉很清爽。java类库比MFC大何止百倍,也不感觉有多少障碍。

到底是什么造成了学MFC如此费力、蹩脚,经过反思比较,偶以为这个糟糕的匈牙利命名法起到了极为恶劣的破坏性作用。
1. 匈法给变量名附加上类型名前缀,例如:nFoo,szFoo,pFoo,cpFoo分别表示整型变量,字符串型变量,指针型变量和常指针型变量。可以看出,匈法将变量的类型信息从单一地点(声明变量处)复制到了多个地点(使用变量处),这是冗余法。冗余法的成本之一是要维护副本的一致性。这个成本在编写和维护代码的过程中需要改变变量的类型时付出。冗余法的成本之二是占用了额外的空间,影响了程序员的视觉,导致理解变量含义需要拐个弯。
例如 strcpy(pstrSource,pcstrDest)
程序员要从变量名称中剔除“pstr”之类的前缀找到Source、Dest才能理解变量含义。
相比 strcpy(source,dest) 到底哪个优越?不要说匈法能“提示变量类型、避免的程序员出错”的所谓优点,如果连参数类型都搞不清楚,还算什么程序员?有疑问直接查文档好了,再说如果你不知道参数含义的话,即使你知道参数类型,你敢随便用吗?还不是一样要查文档?变量的命名,首要就是简洁,含义明确,把多方面的类型信息掺杂进变量名称有百害而无一利。
...全文
16935 219 打赏 收藏 转发到动态 举报
写回复
用AI写文章
219 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nirvana__ 2012-11-22
  • 打赏
  • 举报
回复
但是对于新手还是有很大意义的。
dengtuanfei 2012-11-20
  • 打赏
  • 举报
回复
兰州烧饼,拿分走人
AD8018 2011-09-20
  • 打赏
  • 举报
回复
匈牙利表示法,可以去死。

我只赞成一下以下地方用前缀:

类成员, 加前缀 m_
全局变量, 加前缀 g_
静态局部变量,加前缀 s_
zhou0625 2011-09-20
  • 打赏
  • 举报
回复
来点分,围观
Fee_Chong 2010-10-24
  • 打赏
  • 举报
回复
c++ 用匈牙利比较好, c的话可以不用,清爽一点。
dogliu2010 2010-09-28
  • 打赏
  • 举报
回复
路过,飘过,不知是否还有分~~~
cxz7531 2010-05-11
  • 打赏
  • 举报
回复
看来匈牙利命名法的提出当初就是一个历史性的错误。一开始就是错误的,以后更是错上加错。
名副其实的脑残命名法。
hgreminem 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 193 楼 wubill 的回复:]
你不知道参数类型,你调个球啊,这个是谁调谁根据调用处的上下文来负责
[/Quote]
你傻啊,我说的主要是在维护代码的时候~~~
没有匈牙利命名法,
在多重载的时候你确定一眼就能看出参数的类型?

就好比函数声明如下:

void GetIP(CString &ip);
void GetIP(DWORD *ip);


到调用的时候:

GetIP(IP); // 这个IP是什么类型?


如果用匈牙利命名法我一眼就可以看得出来~~
当然,各有各的爱好,
你不喜欢匈牙利命名法就不要强迫别人也不喜欢
别总那么霸道好不好~~
jurfing 2010-04-29
  • 打赏
  • 举报
回复
接分吧....
shjte 2010-04-29
  • 打赏
  • 举报
回复
来接分了
magic7004 2010-04-29
  • 打赏
  • 举报
回复
晕,争论这个和争论荷包蛋和茶叶蛋哪个好吃有什么区别呢?看个人的口味而已
dream17953 2010-04-29
  • 打赏
  • 举报
回复
本人也被那些名字搞得晕头转向,什么?那叫匈牙利命名法?还算有规律吧,应该说。
leiyu1986rain 2010-04-28
  • 打赏
  • 举报
回复
路过 欣赏风景
尹成 2010-04-28
  • 打赏
  • 举报
回复
楼主,对极了,该死的匈牙利命名法弄得多少程序员眼花缭乱!
cxz7531 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 84 楼 lizhigang34 的回复:]
发现楼主的观点一般都比较新颖,匈牙利命名法的出现是有他的历史原因的,MFC采用了这种命名规范,说明他就是有存在价值的。你把他说的“百弊而无一利”,只能说明你无知了。
记得曾经在一个帖子里跟楼主争过数学在软件开发中的作用,你当时也是说,数学在软件开发中不但没有促进的作用,相反却是一种阻碍。真不知道你为什么会有这样的想法?
[/Quote]
这个观点并不新颖,已经存在几年了。
至于数学在软件开发中的作用,我至今还是这种观点:数学好的人,必然做不好软件;软件高手,数学必烂!
洗洗睡去 2010-04-28
  • 打赏
  • 举报
回复
不明真相群众围观
  • 打赏
  • 举报
回复
反对

我觉得挺好的,十几年了一坚持在用
变量标个类型就嫌麻烦? 影响视觉, 无语...
胖猫尾 2010-04-27
  • 打赏
  • 举报
回复
l观看中
cxz7531 2010-04-27
  • 打赏
  • 举报
回复
现在新兴语言哪个用匈牙利法的,连lunux下C编程也不用,说明这个东西不仅是过时了,而且当年提出来就是一大错误。
shamozhihuzhubohu 2010-04-26
  • 打赏
  • 举报
回复
学习中
加载更多回复(199)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧