【问题标题】:Is it considered correct to omit curly braces strictly on one-liners? [closed]在单行上严格省略花括号是否被认为是正确的? [关闭]
【发布时间】:2014-04-14 10:35:41
【问题描述】:

我个人反对为 if-else-statements 省略花括号,我完全明白为什么应该避免它。

但是现在我遇到了一个有趣的用例,示例代码在这里:

public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E {
    Objects.requireNonNull(exceptionSupplier);
    if (result) return;
    throw exceptionSupplier.get();
}

我个人认为这段代码是:

  • 尽可能简洁,将在下面显示其他变体。
  • 不易受到添加行会改变代码逻辑的问题的影响。

我会将其设置为我自己的个人规则,在控制流语句中使用它。
所以实际上这意味着returnbreakcontinue

此代码的两个替代版本如下所示。

备选方案 1

public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E {
    Objects.requireNonNull(exceptionSupplier);
    if (result) {
        return;
    }
    throw exceptionSupplier.get();
}

备选方案 2

public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E {
    Objects.requireNonNull(exceptionSupplier);
    if (!result) {
        throw exceptionSupplier.get();
    }
}

我会说它们都让代码看起来更复杂,没有明显的原因。

【问题讨论】:

  • 我认为这在某种程度上取决于个人的编码风格。但是我非常不喜欢没有大括号的衬里,因为如果它在同一行上,则可以很容易地跳过查看条件之后的语句。我还想补充一点,您的替代方案并不对我来说看起来很复杂。
  • 答案取决于您习惯的形式。也就是说,这主要是基于意见的
  • 方法名称将代码描述为“如果不是结果则抛出”(我想这大致就是我将其作为 JavaDoc 的内容)。因此,我更喜欢代码中的if (!result) throw ..(即使是 1 行),因为这与广告的行为相匹配。

标签: java if-statement coding-style


【解决方案1】:

在单行上严格省略花括号是否被认为是正确的?

没有任何硬性规定。但考虑到可用性情况,我总是使用大括号。它使代码更具可读性,并且对于初级开发人员来说很容易理解。同样,这纯粹是个人/公司(代码标准)的选择。

在你的选择中,我会选择 Alternative2

public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E {
    Objects.requireNonNull(exceptionSupplier);
    if (!result) {
        throw exceptionSupplier.get();
    }
}

为什么?

  1. 更简洁
  2. 行数更少
  3. 逻辑直截了当

【讨论】:

    【解决方案2】:

    我会选择 Alternative 2

    尽管省略花括号可能会使代码更漂亮、更简洁,但备选方案 2 是最难被误解的。

    快速浏览该函数的人可能会错过 return 语句,因为它不在自己的行中,在备选方案 2 中更难犯这个错误。

    【讨论】:

      【解决方案3】:

      我考虑在任何地方添加curly braces,其中一个主体可以由多个语句defensive programming 组成,这可以防止细微的逻辑错误。但如果您的团队重视:

      • 高度可读的代码
      • 手动格式化代码

      那么您就可以使用另一个规则了,我确实将其应用于我的源代码:

      omit `curly braces` when the single statement of a body occurs at the same line.
      

      这样可以避免额外的不必要的标记,这些标记确实为读者提供了任何有用的东西。但它需要整个团队的纪律和承诺来手动格式化代码,或者应用正确的格式化规则。当格式化规则失败时,我总是手动格式化我的代码,以使其在这些情况下更具可读性。

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 2011-12-22
        • 2019-02-13
        • 1970-01-01
        • 2012-03-01
        • 2012-10-07
        • 2012-01-18
        相关资源
        最近更新 更多