可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
So far from I have been searching through the net, the statement always have if and else condition such as a ? b : c
. I would like to know whether the if
ternary statement can be used without else
.
Assuming i have the following code, i wish to close the PreparedStatement
if it is not null
(I am using Java programming language.)
PreparedStatement pstmt;
//....
(pstmt!=null) ? pstmt.close : <do nothing>;
回答1:
No, you cannot do that.
Instead try this:
if(bool1 && bool2) voidFunc1();
回答2:
Just write it out?
if(pstmt != null) pstmt.close();
It's the exact same length.
回答3:
Why using ternary operator when you have only one choice?
if (pstmt != null) pstmt.close();
is enough!
回答4:
Ternary if
operator is the particular ternary operator. One of a kind.
From Wiki:
In mathematics, a ternary operation is an n-ary operation with n = 3.
It means all 3 operands are required for you.
回答5:
A ternary operation is called ternary beacause it takes 3 arguments, if it takes 2 it is a binary operation.
And as noted above, it is an expression returning a value.
If you omit the else you would have an undefined situation where the expression would not return a value.
So as also noted in other answer, you should use an if statement.
回答6:
As mentioned in the other answers, you can't use a ternary operator to do this.
However, if the need strikes you, you can use Java 8 Optional and lambdas to put this kind of logic into a single statement:
Optional.of(pstmt).ifPresent((p) -> p.close())
回答7:
You cannot use ternary without else, but to do a "if-without-else" in one line, you can use Java 8 Optional
class.
PreparedStatement pstmt;
//....
Optional.ofNullable(pstmt).ifPresent(pstmt::close); // <- but IOException will still happen here. Handle it.
回答8:
It does seem a shame not to be able to use a ternary when building an array which has optional elements.
my $yn = 'N';
my $foo = [ { n => 'a' },
( $yn eq 'Y' ? { n => 'b' } : undef),
{ n => 'c' } ];
say Dumper $foo;
You really want nothing rather than undef or empty string.
This also gives you an empty element rather than 'nothing'.
my $yn = 'N';
my $foo = [ { n => 'a' },
$yn eq 'Y' && { n => 'b' },
{ n => 'c' } ];
say Dumper $foo;