到目前为止,我一直在搜索网络,语句总是有if和else条件,例如a ? b : c
。我想知道if
三元语句是否可以在没有else
的情况下使用。
假设我有以下代码,我希望关闭PreparedStatement
如果它不为空
(我使用的是Java编程语言。)
PreparedStatement pstmt;
//....
(pstmt!=null) ? pstmt.close : <do nothing>;
答案 0 :(得分:46)
No, you cannot do that. 相反,试试这个:
if(bool1 && bool2) voidFunc1();
答案 1 :(得分:13)
写出来?
if(pstmt != null) pstmt.close();
它的长度完全相同。
答案 2 :(得分:13)
为什么只有一个选择时使用三元运算符?
if (pstmt != null) pstmt.close();
就够了!
答案 3 :(得分:9)
答案 4 :(得分:9)
如其他答案中所述,您不能使用三元运算符来执行此操作。
但是,如果需要你,你可以使用Java 8 Optional和lambdas将这种逻辑放在一个语句中:
Optional.of(pstmt).ifPresent((p) -> p.close())
答案 5 :(得分:8)
三元运算被称为三元运算,因为它需要3个参数,如果需要2则是二进制运算。
如上所述,它是一个表达式返回一个值。
如果省略else,则会有一个未定义的情况,表达式不会返回值。
正如其他答案中所述,您应该使用if 语句。
答案 6 :(得分:0)
不能没有其他使用三元组,但是要在一行中执行“ if-without-else”,可以使用Java 8 Optional
类。
PreparedStatement pstmt;
//....
Optional.ofNullable(pstmt).ifPresent(pstmt::close); // <- but IOException will still happen here. Handle it.
答案 7 :(得分:0)
pstmt != null && pstmt.close;
上面的代码行转换为“表达式的左侧翻译为true时->执行右侧”。
答案 8 :(得分:-1)
使用JavaScript,您可以轻松做到:
expression ? doAction() : undefined
因为这实际上是在真实的if语句中实际发生的情况,所以else子句只是未定义。我想像您可以在几乎任何一种编程语言中执行几乎相同的操作,因为else子句只需放置一个不返回值的空类型变量,就不会引起任何编译错误。
答案 9 :(得分:-1)
是的,您can实际上(至少在JavaScript中)做到了:
condition && x = true;
或(在JavaScript中,在Java中可能有类似的方法):
void(condition && x = true)
答案 10 :(得分:-2)
在构建具有可选元素的数组时,不能使用三元组似乎是一种耻辱。
my $yn = 'N';
my $foo = [ { n => 'a' },
( $yn eq 'Y' ? { n => 'b' } : undef),
{ n => 'c' } ];
say Dumper $foo;
你真的不需要任何东西,而不是undef或空字符串。
这也为你提供了一个空元素,而不是'没有'。
my $yn = 'N';
my $foo = [ { n => 'a' },
$yn eq 'Y' && { n => 'b' },
{ n => 'c' } ];
say Dumper $foo;