陷阱 - 抛出悬挂的悬挂和其他问题
最新版本的 Oracle Java 样式指南要求 if
语句中的 then
和 else
语句应始终包含在大括号或大括号中。类似的规则适用于各种循环语句的主体。
if (a) { // <- open brace
doSomething();
doSomeMore();
} // <- close brace
Java 语言语法实际上并不需要这样做。实际上,如果 if
陈述的当时部分是单一陈述,则省略括号是合法的
if (a)
doSomething();
甚至
if (a) doSomething();
但是,忽略 Java 样式规则并省略括号存在危险。具体而言,你会显着增加带有错误缩进的代码被误读的风险。
****晃来晃去的问题:
考虑上面的示例代码,重写没有大括号。
if (a)
doSomething();
doSomeMore();
这段代码似乎说,当 a
和 true
发生时, doSomething
和 doSomeMore
的调用都会发生。实际上,代码拼写错误。doSomeMore()
调用的 Java 语言规范是在 if
语句之后的单独语句。正确的缩进如下:
if (a)
doSomething();
doSomeMore();
****悬空的问题
当我们将 else
添加到混音中时会出现第二个问题。请考虑以下带有大括号的示例。
if (a)
if (b)
doX();
else if (c)
doY();
else
doZ();
上面的代码似乎说当 a
是 false
时会调用 doZ
。实际上,缩进再次不正确。代码的正确缩进是:
if (a)
if (b)
doX();
else if (c)
doY();
else
doZ();
如果代码是根据 Java 样式规则编写的,它实际上看起来像这样:
if (a) {
if (b) {
doX();
} else if (c) {
doY();
} else {
doZ();
}
}
为了说明为什么更好,假设你不小心错误地缩进了代码。你最终会得到这样的东西:
if (a) { if (a) {
if (b) { if (b) {
doX(); doX();
} else if (c) { } else if (c) {
doY(); doY();
} else { } else {
doZ(); doZ();
} }
} }
但在这两种情况下,错误缩进的代码对于经验丰富的 Java 程序员来说都看起来不对。