使用三目运算符实现"什么也不做"。

40

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

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

有没有可能在这个语句中排除"else"部分的逻辑呢? 我尝试使用 return; 但编译器报错了。基本上我想实现的是使用三元运算符的语句,看起来像这样:

foo() ? bar();

这个能实现吗?


1
为什么你不直接使用 if 呢?(不,这是不可能的) - Jeroen Vannevel
我只是好奇这是否可能。就这些。 - domi
3
那并没有实际意义。表达式必须具有一个值。 - SLaks
1
我认为这实际上是希望有一个简单if语句的速记方式,使代码紧凑(即使使用IDE格式化程序也只有一行,没有括号)。最接近的半有效选项是使用foo() && bar()进行部分短路,因为只有当foo()为真时才会执行bar()。 - OXiGEN
2个回答

42

三目运算符通常用于立即分配一个值。

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

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

if (foo())
    bar();

1
不将if语句体放在大括号中违反了良好的代码格式化实践,因此通常会变成 if (foo()) { bar(); }(三行) - Ivan Matavulj
1
@IvanMatavulj:这是一个品味问题,绝对不是普遍认可的最佳实践。我个人认为在这种情况下括号是多余的,不利于可读性。我同意这个关于这个话题的激情回答:http://programmers.stackexchange.com/a/16550 - wvdz
3
我使用 null 时遇到错误,我更愿意使用 void(0) - A. D'Alfonso

6

如果这样工作,我们就不会再称它为三元操作了。我认为唯一的方法是执行一个什么也不做的操作。例如调用一个空方法,或者如果你将这个操作的值分配给一个变量,则只需分配默认值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接