Если без еще тернарного оператора

Пока я не искал в сети, у оператора всегда есть условие if и else, такое как a ? b : c. Я хотел бы знать, можно ли использовать if тернарный оператор без else. Предполагая, что у меня есть следующий код, я хочу закрыть PreparedStatement, если он не равен нулю

(Я использую язык программирования Java.)

PreparedStatement pstmt;

//.... 

(pstmt!=null) ? pstmt.close : <do nothing>;

person Z.V    schedule 18.11.2013    source источник
comment
Тернарный оператор не эквивалентен if / else. На самом деле это выражение должно иметь значение.   -  person GriffeyDog    schedule 18.11.2013
comment
Вы не можете использовать тернарный код без else, но можете использовать Java 8 Optional class: Optional.ofNullable(pstmt).ifPresent(pstmt::close). Смотрите мой ответ ниже.   -  person WesternGun    schedule 01.10.2018
comment
вместо вашего ‹ничего не делать› просто поместите переменную со значением, например, числом 0 или строкой, она не должна ничего делать, хотя и возвращает тип, или даже неопределенный или нулевой или недействительный тип МОЖЕТ работать, но также может вызвать ошибку в java   -  person bluejayke    schedule 07.03.2019


Ответы (10)


Нет, вы не можете этого сделать. Вместо этого попробуйте следующее:

if(bool1 && bool2) voidFunc1();
person frankie liuzzi    schedule 18.11.2013

Зачем использовать тернарный оператор, если у вас есть только один выбор?

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

достаточно!

person cigno5.5    schedule 18.11.2013

Просто напиши?

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

Точно такой же длины.

person Jeroen Vannevel    schedule 18.11.2013

Тернарный оператор if - это особый тернарный оператор. Единственный в своем роде.

Из Wiki:

В математике тернарная операция - это n-арная операция с n = 3.

Это означает, что вам требуются все 3 операнда.

person Yegoshin Maxim    schedule 18.11.2013

Как упоминалось в других ответах, вы не можете использовать тернарный оператор для этого.

Однако, если возникнет необходимость, вы можете использовать Java 8 Необязательно и лямбды, чтобы объединить такую ​​логику в один оператор:

Optional.of(pstmt).ifPresent((p) -> p.close())
person Krease    schedule 04.07.2016

Тернарная операция называется тернарной, потому что она принимает 3 аргумента, а если принимает 2, это бинарная операция.

И, как отмечалось выше, это выражение, возвращающее значение.

Если вы опустите else, возникнет неопределенная ситуация, когда выражение не вернет значение.

Итак, как также отмечалось в другом ответе, вы должны использовать оператор if.

person David Mårtensson    schedule 13.02.2014

Вы не можете использовать тернарный код без else, но чтобы выполнить «if-without-else» в одной строке, вы можете использовать класс Java 8 Optional.

PreparedStatement pstmt;

//.... 

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

pstmt != null && pstmt.close;

Строка кода выше переводится как «Когда левая часть выражения преобразуется в истину» - ›выполнить правую часть.

person imbenrabi    schedule 14.10.2020

Да, вы можете это сделать на самом деле (по крайней мере, в JavaScript):

condition && x = true;

или (в JavaScript, и может быть аналогичный способ сделать это в Java):

void(condition && x = true)
person Yaakov5777    schedule 11.03.2019
comment
Я не уверен насчет Java, но с React вышеуказанный оператор будет работать. Однако сам по себе это не сработает, если вы не заключите каждую сторону в круглые скобки. Т.е. (условие) && (x = true); - person Dev; 05.03.2021

Что ж, в JavaScript вы можете просто сделать:

expression ? doAction() : undefined

поскольку именно это и происходит в реальном выражении if, предложение else просто не определено. Я представляю, что вы можете делать почти то же самое на (почти?) Любом языке программирования, поскольку предложение else просто помещает переменную нулевого типа, которая не возвращает значение, это не должно вызывать никаких ошибок компиляции.

или просто заставьте функцию возвращаться, если все остальное не удается

function oy(x1,x2){if(x1) return x2();}

oy(etzem==6, ()=>yichoyliss=8);

person bluejayke    schedule 07.03.2019