这个花括号约定的名称是什么?

13
我有些困惑,因为我看到很多开发人员在类名或方法下方使用花括号编写方法和类。他们遵循什么惯例?
Sun公司明确说明正确的声明应该是:
// this declaration follows sun's conventions
class Sample extends Object {

    Sample(int i, int j) {
        ....
    }
}

然而,我越来越多地看到这被宣称为(甚至在书籍中):

// this declaration follows a convention I cant identify
class Sample extends Object 
{

    Sample(int i, int j) 
    {
        ....
    }
}

我知道约定只是一种约定,只要你遵循一个约定,一切都好。我只是想知道后面的声明遵循哪个约定?

4
现在应该改为“Oracle明确表示”,对吧?:P - FrustratedWithFormsDesigner
3
尽管问题明显只涉及“惯例名称”,但人们很急切地提出了与主题无关的答案(例如thisthis),或者对这些答案进行投票,这真是令人好奇。 - Jonik
3
@Andy:我同意“不要为小事烦恼”的观点,但仍然不建议“混搭”。相反,选择一个并坚持下去。即使是小细节也可能会分散注意力,影响可读性。 - Jonik
1
很困惑为什么有人会在不留下评论或投票关闭的情况下对问题进行负评。嗯... - Frankie
我从学习编程的书(Java)中学到了这种括号放置方式。现在我已经习惯了它。 - jobukkit
显示剩余2条评论
7个回答

30

这是一种名为ANSI风格的标准样式约定。除了Java以外,在其他语言中也很常见。


13
谢谢你的夸奖。我理解您是在赞扬我回答了实际问题而不是纠结于我个人喜好的风格。 - JeremyP
我一直认为这只是微软的风格 :) - Joeri Hendrickx
3
我想补充一下,这种缩进风格被称为“奥尔曼风格”。有人错误地将其归属于 ANSI C 文档。http://en.wikipedia.org/wiki/Indent_style#Allman_style - SirTophamHatt

12

正如你所说,你已经看到了很多 - 这难道不是一种自成体系的惯例吗?无论是否有单一的来源或名称来指称该惯例都无关紧要。其描述起来非常容易,我认为它不需要特定的归属。维基百科的 "缩进样式"页面将其称为 Allman风格或ANSI风格,但说实话,我使用它已经有好几年了,从未听说过这个名称,而且我认为知道名称也并不会改变我的编码方式 :)

与公共类型和方法命名等惯例不同,大括号位置对于使用您代码的编译版本的开发人员没有影响...因此,在我看来,不同的项目和公司可以对此有不同的看法...同样,是否使用空格或制表符,用于缩进的空格数量等等,我怀疑这就是为什么你在大括号(和可能是私有变量)方面看到了更多的变化而不是其他方面的习惯。


3
这句话的意思是,进行源代码控制操作(如差异和合并)时,格式保持一致会更加方便。如果某人因为个人喜好而整体重新格式化文件,这可能会使得从源代码控制工具中合并变得非常困难。 - FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner:这就是保持项目内一致性的好处,但对于跨项目的公约来说则不是好处。如果我使用第三方库,即使我将代码包含在自己的源代码控制系统中,我也不会开始重新格式化其代码。 - Jon Skeet
@Frankie:我同意,这就是为什么我把第一段从中间移到了顶部的原因。我猜你得到反应的原因是问题的语气——尤其是由于“Sun明确表示”等原因,我最初读到的是对那些开发人员的批评。只有当我重新阅读问题时,我才改变了我的回答语气。 - Jon Skeet
@Frankie:我认为在文本中准确明确地表达情感,人类需要很长时间才能做到 :) - Jon Skeet
@JonSkeet 我永远感谢 Jon Skeet 在他的书中使用 Allman 风格。对我来说,这是唯一的编码方式。我对对称性的渴望喜欢 Allman 风格,讨厌其他所有风格。 - SQL Police
显示剩余2条评论

5

2
这可能只是一个都市传说,但我记得从某个地方听说K&R风格的起源是为了在代码需要打印时节省空间。 - FrustratedWithFormsDesigner
现在已经不再是问题了,因为即使只有20或24行,也可以节省屏幕空间。 - foo

5

我更喜欢第二种约定,因为闭合括号将直接位于开放括号下方,因此更容易找到。


3
后者看起来像C++中非常流行的Allman缩进风格,但我在Java中很少见到它被使用。

3
第二种约定也是C#中Visual Studio的默认缩进样式(因此相当常见)。

1

第一种约定节省了宝贵的空间。括号匹配已经由编辑器完成。


3
现在的时代空间并不是那么宝贵。垂直空间可以增加可读性。我希望能够通过眼睛匹配括号,而不必将光标或插入符号放在其中一个上面。 - JeremyP
2
我当然没有提到磁盘空间。使用第一种约定时,您可以在高分辨率屏幕上看到更多的代码。 - Costis Aivalis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接