如果没有 else 三元运算符
Posted
技术标签:
【中文标题】如果没有 else 三元运算符【英文标题】:If without else ternary operator 【发布时间】:2013-12-01 22:13:39 【问题描述】:到目前为止,我一直在网上搜索,该语句总是有if和else条件,例如a ? b : c
。我想知道if
三元语句是否可以在没有else
的情况下使用。
假设我有以下代码,如果PreparedStatement
不为空,我希望关闭它
(我正在使用 Java 编程语言。)
PreparedStatement pstmt;
//....
(pstmt!=null) ? pstmt.close : <do nothing>;
【问题讨论】:
三元运算符不等同于 if/else。它实际上是一个必须有值的表达式。 你不能在没有 else 的情况下使用三元,但你可以使用 Java 8Optional
类:Optional.ofNullable(pstmt).ifPresent(pstmt::close)
。请参阅下面的答案。
代替你的 使用:
<logic Expression> ? <method> : null;
例子:
(pstmt!=null) ? pstmt.close : null;
是肮脏的解决方案,但有效...
【讨论】:
【参考方案2】:在 javascript 中你可以简单地做:
expression ? doAction() : undefined
因为这是在真正的 if 语句中实际发生的事情,所以 else 子句只是未定义的。我想你可以在(几乎?)任何编程语言中做几乎相同的事情,因为 else 子句只是放置一个不返回值的空类型变量,它不应该导致任何编译错误。
或者如果所有其他方法都失败了,就创建一个函数返回
function oy(x1,x2)if(x1) return x2();
oy(etzem==6, ()=>yichoyliss=8);
【讨论】:
【参考方案3】:pstmt != null && pstmt.close;
上面的代码行翻译为当表达式的左侧“翻译”为真时 -> 执行右侧。
【讨论】:
【参考方案4】:是的,你 can 确实这样做了(至少在 JavaScript 中):
condition && x = true;
或(在 JavaScript 中,在 Java 中可能有类似的方法):
void(condition && x = true)
【讨论】:
我不确定 Java,但是使用 React,上面的语句可以工作。然而,它本身是行不通的,除非你把每一边都放在括号里。 IE。 (条件) && (x = true);【参考方案5】:你不能在没有 else 的情况下使用三元,但要在一行中做一个“if-without-else”,你可以使用 Java 8 Optional
类。
PreparedStatement pstmt;
//....
Optional.ofNullable(pstmt).ifPresent(pstmt::close); // <- but IOException will still happen here. Handle it.
【讨论】:
【参考方案6】:No, you cannot do that. 试试这个:
if(bool1 && bool2) voidFunc1();
【讨论】:
【参考方案7】:正如其他答案中提到的,您不能使用三元运算符来执行此操作。
但是,如果需要,您可以使用 Java 8 Optional 和 lambdas 将这种逻辑放入单个语句中:
Optional.of(pstmt).ifPresent((p) -> p.close())
【讨论】:
【参考方案8】:三元运算称为三元运算,因为它需要 3 个参数,如果需要 2,则为二元运算。
如上所述,它是一个返回值的表达式。
如果您省略 else,您将遇到未定义的情况,即表达式不会返回值。
因此,正如其他答案中所指出的,您应该使用 if statement。
【讨论】:
【参考方案9】:三元if
运算符是特定的三元运算符。独一无二的。
来自Wiki:
在数学中,三元运算是 n = 3 的 n 元运算。
这意味着您需要所有 3 个操作数。
【讨论】:
【参考方案10】:当你只有一个选择时为什么要使用三元运算符?
if (pstmt != null) pstmt.close();
够了!
【讨论】:
【参考方案11】:把它写出来?
if(pstmt != null) pstmt.close();
长度完全相同。
【讨论】:
以上是关于如果没有 else 三元运算符的主要内容,如果未能解决你的问题,请参考以下文章