【问题标题】:"Do nothing" using ternary operator [duplicate]使用三元运算符“什么都不做”[重复]
【发布时间】:2015-08-31 14:28:54
【问题描述】:

我想像这样使用三元运算符 - 只检查语句的 true 部分:

foo() ? bar() : /* Do nothing */;

是否可以排除此语句中“else”部分的逻辑?我尝试使用return;,但编译器给出了错误。基本上我想要实现的只是使用三元运算符的语句,如下所示:

foo() ? bar();

这可以实现吗?

【问题讨论】:

  • 为什么不直接使用if? (不,不可能)
  • 我只是好奇这是否可能。就是这样。
  • 这实际上没有任何意义。表达式必须有值。
  • 我相信这实际上是希望有一个简单的 if 语句的简写,保持代码紧凑(即使使用 IDE 格式化程序,也只有一行,没有括号)。最接近的半有效选项是与 foo() && bar() 部分短路,因为 bar() 仅在 foo() 为真时执行。

标签: java android


【解决方案1】:

三元运算符通常用于立即赋值。

String a = bar() ? foo() : null;

对于您的用例,您可以简单地使用 if 构造:

if (foo())
    bar();

【讨论】:

  • 不将 if 子句主体包裹在大括号中违背了良好的代码格式化实践,因此这通常变为 if (foo()) { bar(); }(三行)
  • @IvanMatavulj:这是个人喜好问题,绝对不是普遍接受的最佳实践。我个人觉得在这种情况下括号是多余的,不会增加可读性。我同意这个话题的热情回答:programmers.stackexchange.com/a/16550
  • 我在使用null 时遇到错误我宁愿使用void(0)
【解决方案2】:

如果它可以这样工作,我们将不再称它为三元。 我认为唯一的方法是做一些什么都不做的事情。 例如调用具有空主体的方法,或者如果您将此操作中的值分配给变量,则只需分配默认值。

【讨论】:

    猜你喜欢
    • 2021-02-26
    • 1970-01-01
    • 2021-10-17
    • 2017-04-30
    • 2018-03-16
    • 2020-11-05
    • 2013-07-30
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多