【问题标题】:Java ternary operator with empty clause带有空子句的 Java 三元运算符
【发布时间】:2013-11-10 08:11:52
【问题描述】:

这个问题更多的是为了我的好奇心。

我经常使用 Java 的三元运算符来编写更短的代码。但是,我一直想知道,如果if 或else 条件之一为空,是否可以使用它。更详细的:

int x = some_function();
if (x > 0)
    x--;
else
    x++;

可以写成x = (x > 0) ? x-1 : x+1;

但是是否可以将if (x > 0) x-1; 写为带有空else 子句的三元表达式?

【问题讨论】:

  • 三元运算符解析为一个值。这不是块。
  • 吹毛求疵:x = (x > 0) ? x-- : x++; 不应该是x = (x > 0) ? --x : ++x; 吗?甚至更好:x = (x > 0) ? x - 1 : x + 1;
  • 没有。让编译器处理这些语义问题。
  • Aaack。请不要编写分配给变量并在同一变量上使用后增量或前增量的代码。这让我头疼。
  • 抱歉一元增量。已编辑。

标签: java ternary-operator


【解决方案1】:

但是是否可以将if (x > 0) x--; 写为带有空 else 子句的三元表达式?

不,条件运算符需要三个操作数。如果你愿意,你可以这样做:

x = (x > 0) ? x - 1 : x;

...但是(主观上)我认为清晰度会受到影响。

【讨论】:

  • 我看到无数的 x=x 分配发生在某个地方。如果发生这种情况,似乎有点愚蠢和低效。
  • 我同意,清晰度肯定会受到影响。我对 Java 的表现很好奇,因为在 C 中(使用 GCC 编译器),可能会写类似x = (x>0) ?: x+1;
  • @ChthonicProject:有趣,apparently 这是一个 GNU 特定的扩展。我之前做过check the JLS;没有看到任何说明第二个和第三个操作数是可选的(在 Java 中)。
  • 感谢您的链接。我不知道它是特定于 GNU 的,并且也会在其他平台上尝试过......并且受苦了!这是一个很大的帮助(因此赞成)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
相关资源
最近更新 更多