乱弹编程规范

作者:飞飞鱼 来源:ITPOW 日期:2005-12-19

这方面的文章已经很多了,促使我也提起斧头站了出来是由于我看到一个非常著名的论坛,其表面光华无比,功能更是花样,被万人所崇拜,但其源代码如同兜里的乱麻--扯不断又理不清,我觉得这会误导编程者认为编程规范不重要,于是我也加入了这场争。这篇豆腐块不是编程规范方面的教程,只算下午的点心,旨在表明我的立场,本文中的例子均以ASP(VBScript语言)为例。关于编程规范,我推荐《高质量程序设计指南》(电子工业出版社,大概网上也有电子版)、《华为编程开发规范与案例》(点击下载)。

有人说看一个人做事如何,看他晾的衣服就可以了。当我们把代码递给主考官时,如果代码毫无格式可言,他会怎么想,他可以不理会我们在家怎么随便,但他会觉得这个人写if都懒得把end if写完,还有心思去考虑else吗?虽然他可能下结论太早,但我们已经在别人脑中留下了这么一个印象。小学老师不厌其烦地说字写错了轻轻擦掉或轻轻划掉,高中老师说你的高考作文不是我给你们改,你们的字迹务必要工整,今天老婆给我们说领带不要打歪了。为什么我们就对我们的代码不能好一点呢,就因为计算机不懂艺术?

当我们再次修改我们的代码时,我们还记得曾经我们写下的fj代表飞机吗?还记得曾经的gender为1时代表男还是女吗?计算机里不需要“我的失忆女友”,每次都要重新认识我们的代码,除了一点心烦的“浪漫”,更多的是不是低效率与高错误?

当与多人合作开发时,我们的代码杂乱无章,要怎样才能让对方明白我们的代码,虽然有《需求说明书》,有《概要设计书》,有《详细设计书》……但这些都不是万能的,就算是万能的,我们难道甘愿一辈子写代码,而不想往上走,也搞搞设计与分析?那么,当我们成为组长时,我们拿“天书”来服人吗?

阅兵时,步兵整齐的步伐、雄壮有力的口号总是让人肃然起敬、心潮澎湃。可以想象,如果我们拥我挤、左突右撞、有歪有斜,我们还会对这支军队充满希望吗?这支军队会有强而有力的战斗力吗?所以从现在开始,让我们遵守一种规范,这种规范不一定要与别人相同,只是合理就行。

首字母
随意找几个程序员,在这个问题上肯定是分成这样两派,支持首字母大写的和支持首字母小写的,还有一类一会儿大写一会儿小写的不计入派别。
首字母大写的一派说,比如一个按钮名称为Btn,为其Click事件添加函数OnClickBtn,按钮名称和函数中的Btn首字母都是大字,而如果按钮名称是btn,函数中为Btn,变来变去的,谁找得着呀。再有,文件名称首字母小写,可是软件作为商品发布时,这个商品名称的首字母又是大写,那么这个文件到底是不是这个商品的一部分呢?多少有点像冒牌的。
首字母小写的一派说,所有的首字母都大写,要多按多少个Shift呀,效率在哪里?再有,变量首字母小写,函数首字母大写,这是多么优秀的规范呀。
其实争论首字母大写还是小写并不重要,重要的是,你要支持大写就在所有该大写的地方都大写,你要支持小写就在所有该小写的地方都小写,不要一会儿大写,一会儿小写。

注释
注释问题是个老生常谈的话题了。那么注释写什么呢?
1、版本。这里不是指软件的版本,而是指这个文件或者这个函数的版本。一般来说,文件开始正式分发了,就得订版本。至少得包括以下一些内容:版本号、修改或创建的内容、修改或创建人、修改完成时间。
2、分隔线。有人说函数与函数之间应该空两行,但这并不是要抵制分隔符的使用。如果上五个函数的功能是围绕A而写的,下五个函数是围绕B而写的,那么前五个函数与后五个函数之间就可以用分隔符,其它函数之间空两行来分隔就行了。分隔符一般是注释符号+自己特定的符号,比如等号、星号、斜线,看各人喜好,同样,合作开始时,把大家的习惯整理一下还是有必要的。使用分隔符时不能一会儿用这个符号,也不能一会儿用那个符号,除非你有特殊的作用。另外分隔符的长短也要一致,这一行80个等号,那一行76个等号,是绝对不行的,这不能让人肃然起敬,反而让人觉得这个人做事不认真,不愿意做细活。
3、说明。
文件的说明。这个文件是做什么用的,它包含了哪些内容,使用它需要什么条件。
变(常)量的说明。这个变量是做什么用的,它的数据类型是什么(针对于VBScript这类弱数据类型语言),取值范围是什么。
函数的说明。这个函数的作用是什么,主要步骤是什么,参数介绍,返回值说明,函数内部的其它说明。
文件的说明当然是写在文件的最开头了(除非不允许)。变量的说明写在变量的前一行或同一行的后面。函数的说明写在函数前几行紧挨着函数。if说明一般写在if前一行和if下一行和else下一行。
由于变量的说明和函数的说明都是嵌在代码中的,所以太多太零乱的说明反而影响代码的可读性,所以说明一定要有意义,一定要写在该写的地方。

缩写
任何一个编程者都使用过缩写,有几点需要注意的:
缩写一定不要有二义,comm,看到这个名称,你想到什么?communication?common?commander?
缩写就要统一,如果这里用count表示数量,那一行又用cnt表示数量,这是不应该的。
对于不常见的缩写,应该说明其代表的意义。如果太多不常见的缩写,或者在大量的地方应用,请在文件的开头专门说明,或者形成文件。

缩进
没有缩进或胡乱缩进是最普遍的现象,没有统一的缩进规范,直接影响代码的可读性,我只想说,多敲几个空格键,也许你的经理就看中你了。一般都是缩进四个空格,有人使用Tab,这不是很好,可能这个平台支持Tab,但换个软件平台Tab表现得就是乱七八糟了,有些软件自动缩进时使用的就是Tab,对此类软件,我们深表叹息。

空格
if a > b then                '良好风格
if a>b then                 '缺少空格

if (a>b) and (c>d) then      '良好风格
if (a>b)and(c>d) then        '缺少空格
if (a > b) and (c > d) then  '空格太多

对齐
if a > b then c = 1          '不良风格
if a > b then                '良好风格
    c = 1
end if

长行拆分
response.Write("<div>" & very_long_expression & _
very_long_expression & "</div>") '不良风格

response.Write("<div>" & very_long_expression & _
               very_long_expression & "</div>") '良好风格

response.Write("<div>" & _
               very_long_expression & very_long_expression & _
               "</div>") '更良好的风格

相关文章