大家好!在《提高篇》最新发布的窗体编程课程中,杨老师提到的“很多现代语言中已经不建议使用类似btnOK这样的变量命名方法”,于是有同学在我们官网论坛上提出了问题:'您说现在窗体的一些控件什么的命名一般不采用fm或cmd这样的方式了,能不能详细的说明一下原因?' 那么今天我们就为大家简单介绍一下这个曾经很有名的“匈牙利命名法”的来龙去脉,也希望大家能够借此引起对变量命名的重视。 我们在《基础篇》中就着重讲过变量命名的重要性,如果变量命名随意又无意义,会给阅读程序的人(包括程序员自己)带来极大的困扰。比如为了计算下表中的一个简单的税金数据: 我们可以随手写出下面这段代码,虽然很短小,但想搞清楚它的目的却着实需要一点时间。 而一旦我们给变量abcde赋以明确的含义,马上就会清楚许多: 这样在读到每个语句时,你都可以清楚的知道这一步到底想要计算哪一个数值,比如是税金还是总计等等。 那么问题来了:在给变量命名的时候,应该让它的名字体现出哪些方面的含义?如果这些含义需要多个单词表示,应该怎样把单词连接在一起?…… 为了能够让大家按照统一的方法处理这些问题,很多公司都为自己的员工制定了一套“命名规范”供大家参考。其中非常著名的一个,就是微软公司的“匈牙利命名法”。 “匈牙利命名法”由曾担任微软总设计师的查尔斯西蒙尼(Charles Simonyi)提出,核心思想就是在变量名称前加一个“前缀”,用以表示该变量是什么类型的。比如 iCount,代表一个表示“数量(Count)”的变量,而前面的“i”代表该变量是一个整数(Integer)类型变量。再比如我们现在使用vba时,也会在窗体编程时保持着用 fm或frm前缀代表窗体、用cmd或btn代表按钮、用txt或tb代表文本框等习惯。如果按照人名做比喻,那么变量的类型就相当于“姓”,而后面的单词或词组就相当于“名”。 之所以称为“匈牙利”命名法,一方面是因为查尔斯西蒙尼祖籍匈牙利;另一方面则因为匈牙利人的名字与大多数欧洲人相反,是“姓在前、名在后”的格式,与我们亚洲一致(引自wiki,杨老师没有考证过),正好与这种让类型在前、含义在后的命名方式相符。 匈牙利命名法其实还分为“系统匈牙利命名法”和“应用匈牙利命名法”,我们刚才指的主要是前者。这种方法部分由于微软公司的巨大影响力,曾经风靡全球,特别是在VB这种半动态语言中占有统治地位。特别是查尔斯西蒙尼当时主要负责的就是word和excel开发部门,所以这种命名法在微软的office研发部门广为应用。 尽管匈牙利命名法能够让程序员一眼得知每一个变量的类型,但是由于现代程序语言的开发环境越来越智能,只需把鼠标移动到变量名上、马上就能提示你这个变量的类型,所以匈牙利命名法的优势已经显得没有必要。而另一方面,现代编程语言越来越强调动态编译等特征,经常需要把一个类型的变量封装成另一个类型使用,而匈牙利命名法却把变量的类型“写死”在其名称中,所以在变量被转换成其他类型使用时,反而会给程序员带来极大的困惑。由于这一原因,微软在推出“.Net”语言平台时正式宣布不再建议使用匈牙利命名法。 不过归根到底,命名法只是一种编程习惯,大家完全可以按照自己的需要和偏好来选择。比如在VBA中,并没有动态语言的那些特点,同时窗体界面编程中,看到前缀确实会方便我们阅读,所以VBA仍然适用这种方法。 最后,我们《基础篇》的网易学员人数刚刚突破10000,在此向各位支持我们的同学再次表示感谢! |
|