《新约.约翰福音》:
不可按外貌断定是非,总要按公平断定是非。
一、重要的版面与样式
- 程序员根据代码的版面理解代码的含义。
- 版面可以说明和支持代码的结构,帮组阅读者理解代码真实的内容。
- 可以说,版面和样式是区分优秀代码和糟糕代码的一个主要特征。
- 我们有理由认为,版面漂亮的代码是经过精心设计的代码。更有理由认为,格式混乱的代码一定没有好好下功夫。
二、了解你的读者
为了写出有效的源代码,我们需要了解谁会阅读这些代码。我们有三类读者:
我们自己
你不仅需要能够读懂刚刚写下的代码,也需要若干年后仍然能明白它的含义。编译器
只要没有语法错误,编译器并不在乎你的代码样式是否美观其他人
它们是最重要的,也是最容易被忽视的读者群。
很显然,编译器对我们的影响最小。我们使用版面与样式,是向人类读者强调代码的逻辑结构。这是一种沟通,应当越清晰越好。
三、什么是好的样式
下面是几种衡量样式风格质量的标准:
- 一致
《C程序设计语言》中Kernighan和Ritchie:
括号的位置并不重要,尽管人们固执己见。我们从几种流行的风格中选择一种即可。挑选一种适合你的风格,然后坚持使用下去。
不管在什么情况下,大小括号的位置,缩进的空格数等应当前后一致。
传统
采用一种业内流行的主要样式,比自己创造一种缩进规则要明智得多。这样阅读你代码的人更容易接受和理解你的代码。简洁
四、了解常用代码版面风格
我们应当认识我们所选择的语言的常用代码版面风格,充分了解它们的优缺点,再根据你的审美观、你所处的编程文化以及你的习惯等,选择一种合适自己的风格。
下面是几种常用的括号位置风格
- K&R风格
int k_and_r ( ) {
int a = 0, b = 0;
while (a != 10){
b++;
a++;
}
return b;
}
优点:占用空间较小,一屏可以显示更多的代码;后括号与对应的语句缩进相同,容易找到括号所终止的构造。
缺点:前后括号上下不对齐,视觉上不匹配;如果页面右侧的前括号丢失,不易察觉;代码语句看上去缩在一团。
为了让印刷页的利用率最大化,在杂志中常使用K&R风格。
- 悬挂式
int hang ( )
{
int a = 0, b = 0;
while (a != 10)
{
b++;
a++;
}
return b;
}
优点:格式清晰整洁;由于前后括号明显,利于区分代码块,易于浏览代码。
缺点:占用竖向空间较多;如果有很多只包含一条语句的代码块,很浪费空间。
- 缩进的括号风格
int indented ( )
{
int a = 0, b = 0;
while (a != 10)
{
b++;
a++;
}
return b;
}
优点:将代码块以及包括代码块的括号联接在一起。
缺点:许多人并不喜欢。
-
其他风格
GNU:介于悬挂式和缩进式之间的一种风格,把括号放置在各个缩进级别一半的位置上;
Linux内核:一半是K&R,一半是悬挂式;
五、选择风格
程序员们常常在编码风格的选择上发生分歧,甚至成为了一种信仰之争,更不幸的是,这种强烈的意见分歧有时蜕变成相互的漫骂和攻击。
我们应当了解:
只要你编写代码时使用的风格是好的,具体使用哪种风格并不重要。
所以我们不争论哪种风格更好,只需:
选择一种好的编码风格,并坚持使用它
六、内部风格
许多软件公司都有自己的内部编码风格,内部风格将提高代码的质量,并使软件开发更安全。具体好处如下:
- 任何向公司外部发布的代码,其样式整洁一致,会显得有整体规划,显得更职业化。
- 有统一的句式和方法,能保证写出来的程序符合同一个标准,有助于防止出现糟糕的代码。
- 你可立即看懂同行的代码,能快速地维护,节约阅读时间,节省公司资金。
建议:
如果你的团队已有一个编码标准,那么使用这个标准,
即使内部样式跟你的个人偏好相矛盾。
七、设立标准
如果你被安排来草拟一份编码标准,那么祝你好运!
这项任务的难度取决于团队的成员:
- 团队由多少位程序员?
- 他们如何单独编写代码的?
- 他们的编码风格是否统一?
- 他们是否想要一套标准?
- 他们已经做好改变编码风格的准备了吗?
下面是为这项艰巨任务提供的几条实用建议:
界定任务范围
你要确定这个任务是为你的直属团队,还是为一个部门或整个公司。对象不同,标准内容和实施方式也会不同。赢得广泛参与
(a).在设立标准之前,让每个人都赞成需要出台一个标准;让他们理解代码一致的好处,以及特立独行的代码样式的危害。
(b).让团队的人尽量参与制定标准,他们将更有可能遵循标准。
(c).如果你的团队有很多程序员,不要尝试让所有人参与,而是选择一个精明强干的小组完成这项任务。做出成果
把所有标准写成一个可理解的文档,可供查阅和参考。文档不但包含一系列规则,还要有相应的解释(尤其是对有争议的条款)。使最佳做法标准化
确保标准体现团队目前最佳的做法,让大家知道他们正在作正确的事。突出重点
如果你只使用C语言,就不要为C、C++、Java语言都创建样式标准吧。逐步完善
一种明智的做法,是一次只完善一小部分内部风格。比如先确定括号布局和缩进,当大家都接受和执行之后,再实施其他的标准。为推广做计划
不要采用惩罚措施,但可以采用一些激励办法,如在代码审核时进行一个公开的表扬。
八、正义的战争
乔治.奥威尔(George Orwell):
要结束一场战争,最快的办法是输掉它
在编程社会中,代码版面不是唯一的烫手山芋,会引起争议的地方还有很多,如编辑器、编译器、方法论、最好的语言。
作为一名职业程序员,我们应当从这些无谓的争论中脱身。我们要有有根据的个人意见,但不能傲慢地认为自己就是对的。