大括弧之战 代码风格

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

K&R风格:

if () {

以传说中的Kernighan & Ritchie之名命名,因他们的样例代码而被广为接受。又因Unitx内核使用这种风格,所以又被称作Kernel Style,也被它的信徒称作One True Brace Style。也因为C代码主要使用这种风格,也被其他类C语言的使用者称作C风格。

这种风格的流行,一是因为大部分教学书籍使用这种风格以节约纸张成本,二是随着Java的普及而被广泛接受。其优点是代码相当紧凑,对低分辨率的显示器和打印文稿来说很有价值;缺点是在有些情况下匹配大括弧有些困难,并且也因此产生很多子派别。如:

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风格。


  • 本文关键词
             K & R 才是真理、Allman 才是王道、神圣不可撼动的GNU、Horstman乃正路也、Lisp大家风范、Ratliff大师之选、1TBS极酷之道。
  • K & R,

    The K&R style is commonly used in C. It is also used for C++ and other curly brace programming languages. Used in Kernighan and Ritchie's book The C Programming Language, it had its origins in Kernighan and Plauger's The Elements of Programming Style and Software Tools.

    When adhering to K&R, each function has its opening brace at the next line on the same indentation level as its header, the statements within the braces are indented, and the closing brace at the end is on the same indentation level as the header of the function at a line of its own. The blocks inside a function, however, have their opening braces at the same line as their respective control statements; closing braces remain in a line of their own, unless followed by anelse or while keyword.

  • Allman
                   Allman style is commonly used in Javaers.
                       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?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值