2

在逻辑上是否有任何区别

if (name.startsWith("a"){
   return true;
} else if (name.startsWith("b") {
   return true;
} else if (name.startsWith("c") {
   return true;
}

if(name.startsWith("a") || name.startsWith("b") || name.startsWith("c") ){
  return true;
}

我更喜欢第二个,因为它对我来说很优雅。我想了解“有什么不同吗?”

4

7 回答 7

7

他们是一样的。

第二个肯定更容易阅读,可读性在编程中非常重要。

我喜欢遵循的规则是,如果 if-else 语句的多个分支产生相同的行为,我会将它们组合起来。(确保它们是完全相同的行为)

于 2013-07-26T15:00:50.080 回答
5

在这种情况下:不。

||带有和&&使用短路的布尔表达式,这意味着如果已经评估为,B则忽略它。因此,第一种选择不是更有效。A || BAtrue

如果 if 子句的主体变得更大,并且包含相同的代码,那么您绝对不想使用第一个版本:

if (name.startsWith("a"){
    // lots of code
} else if (name.startsWith("b") {
    // lost of the same code
}

代码重复是一种可怕的罪过,通常是令人讨厌的错误的原因。

于 2013-07-26T15:05:15.753 回答
2

它们是等价的,但第二个更好,因为它更简洁 - 如果不同的条件应该以不同的方式处理,您将使用第一个,例如

if(name.startsWith("a")) {
    System.out.println("first side effect");
    return true;
} else if (name.startsWith("b")) {
    System.out.println("a different side effect");
    return true;
}
于 2013-07-26T15:01:16.720 回答
2

两者都会做的事情。

最后一个也是最好的一个。即 逻辑或

 if(name.startsWith("a") || name.startsWith("b"){
    etc...
}

因为在逻辑上||

在这种情况下,它只是短路。

其中第二个参数仅在第一个参数不足以确定表达式的值时才被执行或评估:

于 2013-07-26T15:03:16.110 回答
1

它们在逻辑上是相同的。第二个当然更优雅和简洁。

当然,这两个代码片段都不起作用,因为您忘记了右括号。:)

于 2013-07-26T15:01:41.353 回答
0

在这种情况下没有区别。它们是等价的。

于 2013-07-26T15:01:10.097 回答
0

他们的工作目的相同,但第一个对新手来说更难理解。甚至计算机执行第一个比第二个需要更多的时间。但是在这种情况下没有时间问题:D。第一条语句将像这样执行:将检查字符是否与 a 匹配,如果是,那么它将返回 true,否则它将遵循相同的步骤两次,在第二条语句中,如果条件将仅在一行代码中决定要做什么:)。享受

于 2013-07-26T15:06:13.433 回答