【问题标题】:Conditional operator vs if then else [closed]条件运算符与 if then else [关闭]
【发布时间】:2012-11-25 20:09:25
【问题描述】:

如果我想实现一些可以以两种方式实现的条件代码。那么条件运算符 ?: 或 if..then..else 哪种方式更好??

【问题讨论】:

  • 取决于您要执行的操作。如果没有更多信息,这个问题就无法真正回答(甚至主观上)。
  • @BhavikShah:因为有些情况更适合?:,有些更适合if/else
  • 您可能想用您使用的任何语言标记您的问题。
  • @ShivaPareek:它取决于相关用途。如果您真的无法决定,并且没有任何其他信息,请前往if/else;它会混淆更少的白痴。但两者都工作,并且工作得很好它们的用途,并且使用if/else 其中?: 会更有意义,只是看起来对我来说很无聊。
  • @BhavikShah 如果他询问性能,我会感到非常惊讶。应该没有区别,即使有,可读性和可维护性更重要。

标签: c# java c++ c conditional


【解决方案1】:

这取决于。一般来说,您希望主要的活动流 在代码结构中表示。如果关键点 该算法的特点是变量x被初始化,然后 最好的解决方案是使用条件运算符:

x = condition ? f1() : f2();

如果决定是理解什么是关键问题 继续,那么你会更喜欢if。在实践中,这意味着 如果两者都合理可行,您将使用?:。这 关键是“合理地”——如果你发现你正在使用 子表达式中的逗号运算符,子表达式有 副作用,然后使用 ?: 可能不是“合理的”。

编辑:

当你使用?: 运算符时,除了最简单的 在这种情况下,您应该完全按照if 的格式设置它,例如:

x = condition
    ? complex_expression_1
    : complex_expression_2;

我经常这样做。 (有一种特殊情况我会推 它:如果我可以将整个函数缩减为单个返回 陈述。我仍然不允许逗号的副作用 运算符,但有时我会使用更复杂的表达式 否则我会这样做。)

【讨论】:

  • +1 “合理”的另一个标准(除了逗号运算符或副作用)是条件或任何一个子表达式的长度或复杂性,以至于表达式的整体结构不容易随便阅读代码的人都可以识别。 (也许这就是您对逗号运算符的理解,但问题比这更普遍。)
  • @TedHopp 您会惊讶于良好格式的合理性。由于格式在 cmets 中消失了。我将编辑我的答案以举例说明。
  • @JamesKanze 很好的解释,还有一件事我想问一下编译器的词法分析呢? for if then else 它可能需要跳几行,以毫秒为单位,但时间可能比分析 ?: statement no?
  • 我同意仔细缩进,即使是乘法嵌套的三元表达式也非常易读。然而,令人惊讶的是,使用 ctrl-shift-f 进行了如此仔细的格式化。 (例如,Eclipse 中的默认 Java 自动格式设置不会保留您缩进的示例。不了解 C/++/#。)即使您设法将 IDE 设置为保留它,下一个人谁需要维护您的代码可能不会。再见可读性。
  • @TedHopp 我有时会添加额外的括号,以便 vim 保持格式。但总的来说:通常最好不要重新格式化已经格式化的内容,因为没有一个自动格式化程序是完美的。
【解决方案2】:

它们如果不完全相同,也非常接近。即使字节码存在细微差别。您始终可以进行性能测试来确定。

要检查字节码,请查看javap and jad

【讨论】:

  • 除非编译器完全崩溃,否则选择对性能的影响应该是0。问题是更好,而不是更快,所以他显然是在问可读性和可维护性,而不是性能。
【解决方案3】:

这取决于编译器,但在现代编译器中,if else 和三元运算符之间没有区别。不要相信“如果我使用条件运算符,编译器总是会生成更高效的代码”。

【讨论】:

  • -1:存在差异。除了性能。它们是执行不同工作的不同工具。
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 2013-11-09
  • 2019-10-20
  • 2019-10-21
  • 2012-08-02
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多