大括弧之战 代码风格


伟大的大括弧之战已经持续了多年,开发人员们仍然在毫不让步地争吵着大括弧在代码中应该摆放的位置。在多人的项目组里,每个人都给别人的代码重新排版是件很糟糕的事情,版本记录里大量的无用格式变化淹没了重要的有意义的修改,代码在各种格式间拉锯。大括弧的位置作为最具宗教性的争议,分为以下几个派别。

K&R风格:

if () { 

因为C代码主要使用这种风格 节约纸张成本 代码相当紧凑 缺点是在有些情况下匹配大括弧有些困难,并且也因此产生很多子派别。如:

if () { 
} else { 
} 

if () { 
} 
else { 
} 

当if语句的条件很长需要折行时,也有不同的处理方式:

if (aVeryLongBooleanExpression && anotherVeryLongBooleanExpression && 
    yetAnotherVeryLongBooleanExpression) { 
    DoSomething(); 
} 

if (aVeryLongBooleanExpression && anotherVeryLongBooleanExpression && 
        yetAnotherVeryLongBooleanExpression) { 
    DoSomething(); 
} 

或干脆把大括弧放下来

if (aVeryLongBooleanExpression && anotherVeryLongBooleanExpression && 
    yetAnotherVeryLongBooleanExpression)  
{ 
    DoSomething(); 
} 

另外有很多人喜欢在类和函数的上将大括弧独占一行,而语句里使用标准的K&R风格。如C#语言标准里的样例和Apache项目就使用了这种风格。这种写法也被认为是不同于K&R的另外一种风格。

void DoSomething() 
{ 
if () { 

Allman风格: 
if () 
{ 

以Berkeley黑客Eric Allman之名命名,又被称作BSD风格,也叫Ansi风格。大括弧独占一行。这是除了K&R风格外,唯一的在Java社群里大量使用的风格。而Dos/Windows程序员大部分使用这种风格,在这个社群里也被称作标准风格。优点是在所有的地方大括弧都是对称的,大部分人认同这种风格的代码更易读;缺点是浪费空间,比如:

try 
{ 
    DoSomething(); 
} 
catch 
{ 
    DoSomething(); 
} 

如果你无法忍受浪费的行,最好的办法就是用这些行来写注释。

GNU风格:

if () 
  { 
    DoSomething();

所有GNU EMACS和自由软件基金会的代码都使用这种风格,除此之外没有其他地方使用。大括弧距离两边各两格。

Whitesmiths风格:

if () 
    { 
    DoSomething(); 

因Whitesmiths C的样例代码而出名,现在已经很少有人用这种风格。

结论
对于这种没有正确答案的争论,最有效的方法是不要找任何理由,不用比较优劣。如果项目组内使用的工具或软件包是使用某一风格的,那么就和它保持一致;除此之外,选最易于统一管理的Allman风格。

**1.编程风格除了表明你愿意使用某种编程风格之外不能表明任何东西。这是加分项么?肯定是。但这意味着这个人就是个优秀的程序员么?不,这还决定不了那么多东西。
2.一句话:不论标准是什么,Allman风格才是唯一真正的缩进风格。
3.一句话:Tab键应该用于缩进。
4.一句话:空格键应该用于缩进。
5.我是Allman优等民族!
6.因为读的多写得少,所以要这样:more_readable_less_writable,而不要这样:morereadablelesswritable。
7.让代码和花括号在一行真的不忍直视啊!
8.俺还是个初学者的时候曾经很学者范儿地因为某个原因研究过代码风格,但我还是不知道这对成为一个优秀的程序员有没有帮助……
9.用K&R风格对眼睛不好,对脑子也不是很好。既没层次也不对称,累。
10.让人们使用同一种编程风格就好像给每个人找到相同的解决方法一样。这是不可能的,但你可以是使用类似高效的解决方案呀,就像你使用类似喜欢的编程风格一样。比如我就觉得camelCase这种风格烂透顶了,要这样写CamelCase才好嘛。 **

PHP100小编的话:不要从风格去判断一个人水平的高低,但要养成固定的编程风格,跟从团队,少数服从多数,容易看懂,结构清楚明白,我想这就足够了吧。

附:
Allman风格:

if () 
{ 

GNU风格:

if () 
    { 

K&R 风格:

if () { 

Whitesmiths风格:

if () 
     { 

原文:Coding style as an indicator of programming ability progression?

我来吐槽

*