如果没有其他三元运算符

问题描述 投票:44回答:10

到目前为止,我一直在搜索网络,声明总是有if和else条件,如a ? b : c。我想知道if三元语句是否可以在没有else的情况下使用。假设我有以下代码,我希望关闭PreparedStatement,如果它不是null

(我使用的是Java编程语言。)

PreparedStatement pstmt;

//.... 

(pstmt!=null) ? pstmt.close : <do nothing>;
java if-statement ternary-operator
10个回答
47
投票

No, you cannot do that.相反试试这个:

if(bool1 && bool2) voidFunc1();

13
投票

写出来吧?

if(pstmt != null) pstmt.close();

这是完全相同的长度。


13
投票

为什么只有一个选择时使用三元运算符?

if (pstmt != null) pstmt.close(); 

足够!


10
投票

三元if算子是特定的三元运算符。其中的一种。

来自Wiki:

在数学中,三元运算是n-ary运算,n = 3。

这意味着你需要所有3个操作数。


10
投票

如其他答案中所述,您不能使用三元运算符来执行此操作。

但是,如果需要你,你可以使用Java 8 Optional和lambdas将这种逻辑放在一个语句中:

Optional.of(pstmt).ifPresent((p) -> p.close())

8
投票

三元运算符称为三元运算符,因为它需要3个参数,如果它需要2,则它是二进制运算。

如上所述,它是一个返回值的表达式。

如果省略else,则会有一个未定义的情况,表达式不会返回值。

因此,在其他答案中也会提到,您应该使用if语句。


0
投票

您不能在没有其他情况下使用三元组,但要在一行中执行“if-without-else”,您可以使用Java 8 Optional类。

PreparedStatement pstmt;

//.... 

Optional.ofNullable(pstmt).ifPresent(pstmt::close); // <- but IOException will still happen here. Handle it.

-1
投票

在JavaScript中你可以简单地做到:

expression ? doAction() : undefined

因为这是真正的if语句实际上发生的事情,所以else子句是未定义的。我想你可以在(几乎?)任何编程语言中做同样的事情,因为else子句只是放了一个不返回值的null类型变量,它不应该导致任何编译错误。


-1
投票

是的,你can实际上这样做(至少在JavaScript中):

condition && x = true;

或者(在JavaScript中,可能有类似的方法在Java中执行此操作):

void(condition && x = true)
© www.soinside.com 2019 - 2024. All rights reserved.