如果我在Java中省略大括号可以吗?[已关闭]

2022-08-31 11:11:33

我搜索了一下,但找不到答案,无论出于何种原因,我都太羞于问教授,因为当数百人盯着你看时,这种感觉......

无论如何,我的问题是括号的重要性是什么?如果我省略它们可以吗?例:

for (int i = 0; i < size; i++)  {
   a += b;
}

for (int i = 0; i < size; i++)
   a += b;

我知道它们都可以工作,但是如果我省略括号(由于可见性,我倾向于做很多事情),这会改变什么,任何东西吗?正如我所说,我知道它有效,我测试了十几次,但现在我的一些大学作业越来越大,出于某种原因,我不理智地担心从长远来看,这会导致一些问题?有理由担心这一点吗?


答案 1

除了代码的可维护性之外,它不会改变任何东西。我见过这样的代码:

for (int i = 0; i < size; i++)
   a += b;
   System.out.println("foo");

这意味着:

for (int i = 0; i < size; i++)
   a += b;
System.out.println("foo");

...但应该是这样的:

for (int i = 0; i < size; i++) {
   a += b;
   System.out.println("foo");
}

就个人而言,我总是包括括号,以减少在阅读或修改代码时混淆的可能性。

我工作过的每家公司的编码惯例都要求这样做 - 这并不是说其他一些公司没有不同的惯例......

以防万一你认为它永远不会有什么不同:我不得不修复一次错误,这几乎等同于上面的代码。这非常难以发现...(诚然,这是几年前,在我开始单元测试之前,这无疑会使诊断更容易)。


答案 2

使用大括号使代码更易于维护和理解。因此,默认情况下,您应该考虑它们。

我有时会跳过在保护子句上使用大括号以使代码更加紧凑。我对此的要求是,它们是后跟跳转语句的语句,如 或 .此外,我将它们放在同一行中,以引起人们对成语的注意,例如:。ifreturnthrow

if (!isActive()) return;

它们也适用于循环内的代码:

for (...) {
  if (shouldSkip()) continue;
  ...
}

以及来自不一定位于方法主体顶部的方法的其他跳跃条件。

一些语言(如Perl或Ruby)有一种条件语句,其中大括号不适用:

return if (!isActive());
// or, more interestingly
return unless (isActive());

我认为它等同于我刚才描述的内容,但得到了语言的明确支持。