【问题标题】:Is there any benefit of using if statement with logical operator? [closed]将 if 语句与逻辑运算符一起使用有什么好处吗? [关闭]
【发布时间】:2013-09-19 09:03:38
【问题描述】:

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

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

【问题讨论】:

  • 您能否提供一些示例代码来说明您的意思?
  • 老实说,我不确定“条件运算符”是什么
  • @gefei, something ? anything : anything_else
  • @moghaddam 大部分同意,但是这是否对编译器产生影响是特定于语言的,在 C++ 中它可能会根据编译器和优化设置产生影响。 ..
  • @较新的请清楚你在问什么?正如您在 cmets 中看到的那样,每个人都提出了一些新的猜测。所以现在轮到您在 OP 中进行更改以清楚起见

标签: java c++ c


【解决方案1】:

使用条件运算符与使用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;

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

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


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

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

【讨论】:

  • 感谢朋友,我认为短路评估是除了可读性之外的另一个重要原因。所以我们应该在这里结束吗?或者任何我们可以学习的新东西。 Aniket Thakur
  • 非常感谢,您说得对。对不起,我错了。那么这会是一个结论吗? @斯蒂芬C
  • 结论 - 在大多数情况下,&& 比嵌套 if/else ... 更具可读性。
  • 那么你觉得你关于短路评估的演讲是什么? @斯蒂芬C
  • @Newer - 你真的明白我在那里说的话吗?我说&&if/else BOTH 做(或可以做)短路。
【解决方案2】:

您在做决定时需要考虑的一个功能是Short-circuit evaluation

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

【讨论】:

  • 嵌套 if 语句中的其他条件也仅在前者成立时才被评估。
  • 这就是为什么它们的评估顺序很重要。
  • 那是不是很大的好处?
  • @AniketThakur - OP 用“条件”这个词错误地让我们感到困惑,而他实际上是指别的意思。看看他的例子。
  • 你说得对。我道歉
【解决方案3】:

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

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

【讨论】:

  • 当他实际上意味着其他东西时,OP 错误地使用了“条件”一词,从而使我们感到困惑。看看他的例子。
  • 抱歉我的错误,我已经编辑了我的问题。
【解决方案4】:

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

【讨论】:

  • 运算符通常也被称为为“the”三元运算符,因为在所有提到的语言中它是唯一的三元运算符(据我所知)。但称它是正确的名称是相当误导的。
  • 你说得对。我很抱歉。
  • 无需道歉 - 只需编辑您的答案。特别是因为OP在此期间澄清说他甚至没有考虑使用条件运算符。
猜你喜欢
  • 1970-01-01
  • 2021-01-02
  • 2020-10-19
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 2017-06-15
相关资源
最近更新 更多