Java 在一行程序中完全省略大括号是否正确?

Java 在一行程序中完全省略大括号是否正确?,java,if-statement,coding-style,Java,If Statement,Coding Style,我个人反对在if-else语句中省略大括号,我完全明白为什么应该避免 然而,现在我遇到了一个有趣的用例,示例代码如下: public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E { Objects.requireNonNull(exceptionSupplier); if (

我个人反对在if-else语句中省略大括号,我完全明白为什么应该避免

然而,现在我遇到了一个有趣的用例,示例代码如下:

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();
    }
}
public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E {
    Objects.requireNonNull(exceptionSupplier);
    if (!result) {
        throw exceptionSupplier.get();
    }
}
public void throwOnFail(最终布尔结果,最终供应商例外供应商)抛出E{
对象。要求不完整(供应商除外);
如果(!结果){
抛出异常supplier.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();
    }
}
public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E {
    Objects.requireNonNull(exceptionSupplier);
    if (!result) {
        throw exceptionSupplier.get();
    }
}
public void throwOnFail(最终布尔结果,最终供应商例外供应商)抛出E{
对象。要求不完整(供应商除外);
如果(!结果){
抛出异常supplier.get();
}
}
为什么?

  • 更简洁
  • 更少的行数
  • 逻辑上直截了当

  • 我考虑添加<代码>大括号无处不在,其中一个主体可以由多个语句组成:代码>防御编程< /代码>,它可以防止细微的逻辑错误。但如果您的团队重视:

    • 高可读性代码
    • 手工格式化代码
    然后,您可以使用另一条规则,我会将其应用于我的源代码:

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

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

    我会选择备选方案2

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


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

    我认为这在某种程度上取决于个人的编码风格。但是我非常不喜欢没有大括号的一行语句,因为如果语句在同一行上,人们很容易跳过条件后面的语句。我还想补充一点,你的选择在我看来并不复杂。答案取决于你习惯于哪种形式。也就是说,这主要是基于观点的。方法名称将代码描述为“如果不是结果则抛出”(我猜这大概就是我将其称为JavaDoc的内容)。因此,如果(!result)在代码中抛出..(甚至作为1行程序),我更喜欢
    ,因为这与公布的行为相匹配。