2012年(4)
分类: IT业界
2012-08-27 22:35:35
如果你问一名程序员,工作中最常做的是什么,我想阅读代码绝对会是候选答案之一。最近拜读了Diomidis Spinellis的大作,感触良多。在这里,我只就编程规范的问题说说我的看法。
也许有人会说,写出来的仅仅是源代码,无论你采用什么样的规范方式,最终经过预处理、编译、汇编、链接生成的可执行代码都是一样的,你的煞费苦心可能多此一举。不过我想说,存在这种想法的人忽视了一点:源代码除了用来执行具体任务之外,还有一个功能,那就是给别人看的。面向对象模式的出现已经越来越强调软件的重用性,试想一下,如果写出来的代码凌乱不堪,可读性差,将如何被后续软件所继承呢?另外如果需要更改,相信最容易出错的地方往往就是软件整洁度最差的地方,因此不严格执行良好的编程规范的软件其可维护性也得不到保证。
那么下面就来说说代码编写应遵循的一般原则吧。
l 对于项目名/文件名/模块(函数)名,最好既能够概括相应级别要实现的具体功能,又不失去自己的特色。例如关于视频流播放器的项目叫做XXPlayer就很恰当,而其中关于格式处理部分的源文件就可以叫做format.cpp,该源文件中关于读取AVI视频格式的函数如果取名ReadAVI()也中规中矩。
l 对于变量的命名,一般使用匈牙利命名法,不过某些情况下应灵活采取一些取舍的办法。例如:
a) 循环语句中,循环变量完全可以是i、j、k这些简单而又没有实际意义的变量,这样虽然会在一定程度上破坏整体风格,但得到的好处是很明显的,即循环内部引用这些变量(尤其用作数组下标)时非常方便,一目了然,而且单一循环变量可以在不同循环体中重用,提高了软件的效率;
b) 项目中应对全局变量、静态变量和局部变量在命名时加以区分,这样在引用这些变量时其作用域和生存期就很清晰,无需现场查阅搜索。例如,全局变量可以以“g_”为前缀,静态变量可以以“s_”为前缀,而局部变量不加前缀,这样三者就能很好地区分开来;
c) 应适时分段使用缩略语。这样做的目的是为了缩短变量名的长度。例如,全局变量的意义是长方形对角线的长度,如果不使用缩略语,变量名将会是g_dwRectangleDiagonalLength,这样的名字相信绝对令人无法忍受,而如果写成g_dwRectDiagLen,在不影响意义理解的基础上我们成功地将其长度变成原先的一半。
l 关于版式和缩进。在阅读别人代码的时候发现普遍存在的一个本人认为不太好的习惯,那就是代码中没有空格。这显然是不好的,因为这样的话代码会显得紧凑局促,缺乏美感。通常在运算符的两端我们都要使用空格将操作数与运算符隔开,单操作数的语句(例如i++ 这种)有时不加空格被认为是合理的。而关于缩进,我与书中的观点一致,即应保持一致的缩进风格,通常{}括起来的部分保持1个tab的缩进是不错的。
以上仅仅是基于《代码阅读》一书中第七章的内容说了一些我对编程规范的看法,其实真正高质量的代码不一定非要按照这些规范,每位coder都可以有自己规范,但重点是易读、通俗、统一,相信遵循了编程规范,我们所写的代码质量将会有大幅的提升。