代码规范及代码复审
1.对代码规范的讨论
编写一个程序是否需要代码规范?本人以为,规范当然得有,但也必须合理。
为什么我们需要代码规范?代码规范就是规定代码中某些格式必须遵守一定条件,比如缩进、变量命名、注释等。当制定了合理的规范后,不仅代码本身会显得美观,而且每个人都很容易读懂,代码的可维护性也大大增强。举个例子,甲程序里使用的变量名有input_msg,output_msg,decipher,每个符号之间均加了空格,而乙程序里则是随意地使用a,b,c等无意义的字母作为变量名,而且多个函数里重复使用相同名称的局部变量。这样,一旦程序出现bug需要调试,甲程序就会比乙程序更快地找到出错的位置。如此看来,代码规范是必不可少的。下面我们来看一看人们对代码规范的误解。
有人认为,“规范”是官僚制度的产物,只会降低编程效率、浪费时间。这种看法,我不敢苟同。如果编程的规范代表了官僚主义,那么还有什么规范不是官僚主义呢?没有规矩不成方圆,如果没有编程规范,那么每个人编写程序都是随心所欲,代码乱七八糟,就像物品胡乱堆放的仓库一样,想要读懂会很困难。这种一味把规范视为束缚的观点,很显然是不可取的。
还有人认为,我有自己的规范和原则,我没必要遵守别人强加给我的规范和原则。其实拥有自己的规范和原则并没有错,否则等同于没有规则。但是这种观点也过于个人主义,别人要你遵守某些规范和原则,你就以“这和我的原则冲突”而强烈排斥。然而,编写大程序时,光靠个人的努力永远不够,而需要团队的紧密合作。你非要完全按照自己的想法走,不顾别人的建议或是劝阻,那么团队的力量就会无法最大发挥出来。
又有人发话了,好吧,我承认代码是得有规范,但我也讨厌千篇一律,因此代码规范中应当允许很多例外。这种观点,是没有弄清楚代码规范本身的目的而产生的。代码规范并不是一刀切地规定每个人写的代码都必须是同一种风格,而只是在代码的关键部分寻求一些统一。想一想,国家的法律会要求每位国民都按照同一种方式生活吗?法律只是规定了你应当做什么,不应当做什么。代码规范也是一样,只是它不像法律具有强制性,而更像是一种引导,引导你如何写出美观、易读的代码。从这一点上看,合理的代码规范,是不会产生什么”例外“的。
但是,有的人自以为”我最会制定规范,我制定的规范最合理,所以你们都要听我的“,无异于把自己的观点强加于他人身上,违背了己所不欲勿施于人的道理。一份合理的规范应当是整个团队经过认真研讨后得出,并约定大家都要遵守的,既能让每个人都能接受,又具有一定的引导性。个人要求集体完全跟着自己走,就是把自己当成了官僚皇帝,就是不尊重队友的感情。你不尊重队友,队友凭什么来尊重你?
综上所述,我们需要一种合理的代码规范。一个好的程序中,应当处处体现这些代码规范。
2.代码审查实例
最近我对我的一位同学的代码进行了复审,其结果如下:
当输入正确的命令后,该程序可以正确地实现题目的生成与计算,可以正确评测对现有题目的作答,说明该程序实现了基本的功能。
该程序使用C#编写,采用面向对象的编程思想,程序不同的功能模块放入不同的源程序中,可以有效减少单个源文件的代码量,编写代码时按照规范进行缩进及添加空格,显得简洁美观。各变量、方法使用意义明确、简单的单词,程序的每一行代码不长,总体可读性较好。该程序没有重复、多余的代码,没有不必要的全局变量。
当输入错误的命令后,该程序能及时报出Exception并输出。经多次测试,未发现越界等低级错误。
该程序在必要的位置加上了注释,加强了程序的可读性。
如果该程序能配上一份详细、准确的说明文档,说明该程序的具体功能、操作细节等,就会更易使用和维护。