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

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. Golang 从菜鸟到大咖的必经之路_GO 语言的转义字符、注释、规范和代码风格要求

    目录 一.GO 语言转义字符 A.Golang 常用的转义字符(escape char): B.课程练习 二.Go 语言注释: A.注释(Comment): B.Go 语言中的注释类型: C.注释不会 ...

  2. 零基础自学Python:安装Python、解释器、代码风格等

    Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进.Python具有丰富和强大的库,又被称为胶水语言.能把其他语言(主要C/C++)写的模块很轻松的结合在一起 ...

  3. .Net 项目代码风格规范

    最近没啥时间自己状态也不是很好,公司的事情忙,自己也有一些事情要处理,所以好久没有写博客了.利用公司午休时间写一写,以下是参考了一些资料,整理出来,共勉之. 代码风格没有正确与否,重要的是整齐划一,清 ...

  4. 良好的代码风格养成记

    综述 优秀的代码风格如同一身得体的打扮,能够给人以良好的印象.初学程序设计,首先必须建立良好的编程习惯,这其中就包括代码风格.本文就代码风格中的几个重点问题进行了讨论,并在文后给出了一份优秀的代码作为 ...

  5. [No000013D].Net 项目代码风格参考

    1. C#代码风格要求 1.1 注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,不需要加注释:否则需要添加注释. 当添加注释时,添 ...

  6. java 代码风格_Java代码风格:最终决定

    java 代码风格 所谓的最不起眼的事情如何引发争议性的讨论,有时甚至引起激烈的辩论,难道不是很有趣吗? 例如,我目睹了几次场合,如何使用关键字final引发了非常激烈的争论. 对于外部观察者来说,这 ...

  7. 代码风格之Prettier简介

    多人协作中统一的代码风格有利于项目的发展这是共识,但是采用什么标准来统一代码这选择就相对纷杂.项目刚开始使用了ESLint来规范代码,但是ESLint默认是支持JavaScript,加上配置可以支持T ...

  8. Linux内核代码风格

    Linux内核代码风格 这是一个简短的文档,描述了linux内核的首选代码风格.代码风格是因人而异的,而且我不愿意把我的观点强加给任何人,不过这里所讲述的是我必须要维护的代码所遵守的风格,并且我也希望 ...

  9. Java命名规范和代码风格

    Java命名规范和代码风格 基本命名规范 包命名 包名按照域名的范围从大到小逐步列出,恰好和Internet上的域名命名规则相反. 由一组以"."连接的标识符构成,通常第一个标识符 ...

最新文章

  1. C语言 条件编译详解
  2. 独家 | 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)
  3. FLASH全屏,左右侧,闪烁广告及对错觉的代码补充.
  4. 计算机教案word格式模板,用自定义模板编辑教案
  5. SET UPDATE TASK LOCAL and commit session issue
  6. MySQL入门 (三) : 运算式与函式
  7. JavaScript 实现回文解码
  8. [源码]C# to SQL 的翻译器.net 1.1版
  9. docker没有下载完全_一个时代的结束:苹果正式关闭iTunes,但歌曲下载并没有完全消失...
  10. H - 数论中的异或 HRBUST - 1688
  11. 苹果电脑怎么用_这些朋友更适合苹果电脑,你了解吗?
  12. 如何正确的卸载MATLAB7?
  13. Lingo11 解决优化问题( 下载和运行 )
  14. 在 vue中使用 html5 的 drag和 drop 拖拽功能
  15. Java -- 每日一问:谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?
  16. pythonclass语法_【python类别概念自学】class的语法整理(继承、抽象类别、魔术方法)...
  17. Bootstrap抽样和Monte Carlo思想
  18. [K8S]error execution phase preflight: couldn‘t validate the identity of the API Server
  19. 深入理解操作系统实验——bomb lab(phase_1)
  20. 测试京东万象的Webservice接口

热门文章

  1. 《『若水新闻』客户端开发教程》——14.代码编写(6)
  2. ansible的命令操作模块6
  3. 再谈MySQL全库备份
  4. bootstrap - navbar
  5. 如何用代码爬抓电商数据(附淘宝API调用实例)
  6. Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
  7. Android Layout XML属性
  8. IE9为啥没有加载进度进度提示
  9. 【转】C#的内存管理:堆栈、托管堆与指针
  10. NPM流行包再起波澜:维护人员对俄罗斯用户发特定消息,谁来保证开源可信?...