【发布时间】: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();
}
我个人认为这段代码是:
- 尽可能简洁,将在下面显示其他变体。
- 不易受到添加行会改变代码逻辑的问题的影响。
我会将其设置为我自己的个人规则,仅在控制流语句中使用它。
所以实际上这意味着return、break 和continue。
此代码的两个替代版本如下所示。
备选方案 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