【问题标题】:What is the name of this convention for curly braces?花括号的这个约定的名称是什么?
【发布时间】:2011-05-26 00:51:17
【问题描述】:

我看到开发人员在类名或方法下方使用花括号编写方法和类的数量让我感到有些困惑。他们遵循什么惯例?

Sun clearly states 正确的声明是:

// 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) 
    {
        ....
    }
}

而且我知道约定只是约定,只要您遵守约定,一切都很好。我只是在寻找后一个声明遵循什么约定的答案?

【问题讨论】:

  • 现在不应该读作“Oracle 明确声明...”吗? :P
  • 尽管这个问题显然只是关于会议名称,但令人好奇的是人们是多么渴望提出他们的意见和偏好作为题外话的答案(例如 thisthis) 或作为对这些答案的投票。
  • 规则 0:不要为小事出汗。所有标准支撑位置都同样有效。使用你喜欢的任何一个。连连看。它们对可读性没有显着影响。它们不值得被纳入公约。
  • @Andy:我同意“不要为小事出汗”,但仍然不建议“混合搭配”。相反,选择一个并坚持下去。即使是小东西也会分散注意力,影响可读性。
  • 让我困惑为什么有人会在不发表评论或投票结束的情况下对问题投反对票。嗯……

标签: java conventions curly-braces


【解决方案1】:

这是一种称为 ANSI 样式的标准样式约定。它在 Java 以外的其他语言中也很常见。

【讨论】:

  • +1 因为您回答了实际提出的问题,而不是就您喜欢的风格进行圣战。
  • @syron 简直完美!正是我想要的。谢谢!
  • 我一直认为这只是微软风格:)
  • 我想补充一点,这就是所谓的“Allman 风格”。它被错误地归因于 ANSI C 文档。 en.wikipedia.org/wiki/Indent_style#Allman_style
【解决方案2】:

正如您所说,您已经看过很多次了 - 无论该约定是否有单一来源或名称,这是否使其本身成为一种约定?这很容易描述,我认为它不需要特定的归属。 Wikipedia 的 "indent style" 页面将其称为 Allman Style 或 ANSI 样式,但坦率地说,我多年来一直在使用它,但从未听说过这个名字,而且我认为知道这个名字不会改变我的编码方式:)

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

【讨论】:

  • 这样做的好处是使源代码控制操作(如 diff 和 merge)更容易。当有人仅仅因为他们更喜欢一种风格而不是另一种风格而去重新格式化整个文件时,这会使从源代码控制工具进行合并变得非常痛苦。
  • @FrustratedWithFormsDesigner:这是在项目中保持一致的好处 - 但它不是跨项目约定的好处。如果我使用第 3 方库,即使我将代码包含在自己的源代码控制系统中,我也不会开始重新格式化它的代码。
  • @Jon 恐怕,就像这个线程上的其他几个人一样,你在阅读这个问题时遇到了一个软弱的地方。我只是在寻找公约的名称。有了这些知识,我最终会挖掘公约的其他方面(或者如果没有的话)。不过,从广义上讲,我同意你的所有回答。
  • @Frankie:我同意,这就是我将第一段从中间移到顶部的原因。我怀疑你得到反应的原因是问题的语气——我最初肯定将其读作 批评 那些开发人员(特别是由于“Sun 明确声明”等)。只有当我重新阅读问题时,我才改变了回答的语气。
  • @Jon 是的。作为一个非本地人,我可能听起来有点被动攻击性。再加上我对Allman indent style 更友好的事实。啊!听起来不是很好吗?把你的想法放在哪里?继续努力吧。我为你的250k欢呼! ;)
【解决方案3】:

我更喜欢第二种约定,因为右括号将在左括号的正下方,因此更容易找到。

【讨论】:

    【解决方案4】:

    第一个约定节省了宝贵的空间。无论如何,括号匹配是由编辑器完成的。

    【讨论】:

    • 空间在这个时代并不珍贵。垂直空间增加了可读性。我希望能够通过眼睛匹配大括号,而不必将光标或插入符号放在其中一个或另一个上。
    • 我当然不是指磁盘空间。使用第一个约定时,您可以在高分辨率屏幕上看到更多代码。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      后者看起来像Allman indent style ,它在 C++ 中很流行,但我没有看到它在 Java 中经常使用。

      【讨论】:

        【解决方案7】:

        见:http://en.wikipedia.org/wiki/Indent_style

        Syrion 已将其标识为 ANSI 样式,Sun 遵循 K&R 大括号放置样式。

        Tangent:现在我知道这种被诅咒的风格叫做Whitesmiths style

        【讨论】:

        • 这可能只是一个都市传说,但我记得在某个地方,K&R 样式的起源是为了在打印代码时节省空间。
        • ... 当你得到的只有 20 或 24 行时,可以节省屏幕空间。现在这已经不是问题了。
        猜你喜欢
        • 1970-01-01
        • 2020-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 2022-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多