-1

我知道if 语句可以以多种方式使用,例如带有逻辑运算符的 if 语句、if...else嵌套 if 语句等。

使用 &&、|| 等逻辑运算符时 要确认很多条件,那么代码大小会比使用多个嵌套 if 语句时更小。将此 if 语句与条件运算符一起使用是否还有其他好处(运行时间、调试、编译时间等)?

4

4 回答 4

2

if使用条件运算符与使用语句相比没有性能优势。如果两个版本的代码是等效的,则没有理由期望 JIT 编译器不会生成具有等效性能的代码。

编译时间性能的问题是无关紧要的......与以分钟为单位的(完整)构建时间相比,亚毫秒级的差异。

真正的区别在于可读性。一些计算可以使用条件表达式更简洁地表达,并且在某些情况下使代码更具可读性。可读性相关的,因为会影响您和其他人调试和维护代码的能力。

然而,可读性取决于代码和读者的复杂程度。因此,很难对使用“高级”结构的可读性影响进行概括。


你举个例子:

if (condition 1) {
     if (condition 2) {
        if (Condition 3){
            statement 1;
        } else nothing;
     } else nothing;
  } else statement 3; 

相对

if (condition 1 && condition 2 && condition 3) {
     statement 1;
  } else statement 2;

首先,&&运算符是逻辑运算符,而不是条件运算符。(是的,它是一个短路运算符,但这并没有改变它被称为逻辑运算符的事实!!)条件运算符是三元?运算符。

其次,同样的论点无论如何都适用,尽管可读性论点(在大多数情况下)偏向于&&(and ||)。只有完全的新手在阅读您的代码的第二个版本时可能会遇到问题。


我认为短路评估是除了可读性之外的另一个重要原因。所以我们应该在这里结束吗?

事实上,这根本没有区别。&&短路等效于您(可以)使用嵌套if/else语句获得的内容。(当您比较&&and 和&逻辑运算符时,实际上会出现差异。)

于 2013-09-19T09:18:55.187 回答
0

我认为性能不会有任何好处。

从代码的角度来看,它将简化 if-else 块。但同样,如果您尝试使用三元运算符实现嵌套的 if-else,它将变得复杂且难以维护。

于 2013-09-19T09:17:36.460 回答
0

做出决定时需要考虑的一项功能是短路评估

这意味着当您在嵌套 if 语句上使用条件运算符时,仅当第一个参数不足以确定表达式的值时,才会执行或评估第二个参数。

于 2013-09-19T09:13:18.077 回答
0

它们的正确名称是三元/三元运算符/语句。不,字节码/二进制代码应该与“普通” if 中的相同。

于 2013-09-19T09:09:51.037 回答