到目前为止,我一直在搜索网络,声明总是有if和else条件,如a ? b : c
。我想知道if
三元语句是否可以在没有else
的情况下使用。假设我有以下代码,我希望关闭PreparedStatement
,如果它不是null
(我使用的是Java编程语言。)
PreparedStatement pstmt;
//....
(pstmt!=null) ? pstmt.close : <do nothing>;
No, you cannot do that.相反试试这个:
if(bool1 && bool2) voidFunc1();
写出来吧?
if(pstmt != null) pstmt.close();
这是完全相同的长度。
为什么只有一个选择时使用三元运算符?
if (pstmt != null) pstmt.close();
足够!
如其他答案中所述,您不能使用三元运算符来执行此操作。
但是,如果需要你,你可以使用Java 8 Optional和lambdas将这种逻辑放在一个语句中:
Optional.of(pstmt).ifPresent((p) -> p.close())
三元运算符称为三元运算符,因为它需要3个参数,如果它需要2,则它是二进制运算。
如上所述,它是一个返回值的表达式。
如果省略else,则会有一个未定义的情况,表达式不会返回值。
因此,在其他答案中也会提到,您应该使用if语句。
您不能在没有其他情况下使用三元组,但要在一行中执行“if-without-else”,您可以使用Java 8 Optional
类。
PreparedStatement pstmt;
//....
Optional.ofNullable(pstmt).ifPresent(pstmt::close); // <- but IOException will still happen here. Handle it.
在JavaScript中你可以简单地做到:
expression ? doAction() : undefined
因为这是真正的if语句实际上发生的事情,所以else子句是未定义的。我想你可以在(几乎?)任何编程语言中做同样的事情,因为else子句只是放了一个不返回值的null类型变量,它不应该导致任何编译错误。
是的,你can实际上这样做(至少在JavaScript中):
condition && x = true;
或者(在JavaScript中,可能有类似的方法在Java中执行此操作):
void(condition && x = true)