Короткое выражение IF - ELSE

Я пытаюсь сделать мой код более удобочитаемым, поэтому решил использовать несколько коротких инструкций IF.

Здесь мой код, который не работает ( "не выражение" ):

jXPanel6.isVisible() ? jXPanel6.setVisible(true) : jXPanel6.setVisible(false);

Что случилось с этим? Нужны скобки? Где?

Ответ 1

Терминальное выражение x ? y : z может использоваться только для условного присваивания. То есть вы можете сделать что-то вроде:

String mood = inProfit() ? "happy" : "sad";

потому что тернарное выражение возвращает что-то (типа String в этом примере).

Он не предназначен для использования в качестве короткого, встроенного if-else. В частности, вы не можете использовать его, если отдельные части не возвращают значение или не возвращают значения несовместимых типов. (Таким образом, хотя вы могли бы сделать это, если бы оба метода возвращали одно и то же значение, вы не должны вызывать его только для побочных эффектов).

Таким образом, правильный способ сделать это будет только с блоком if-else:

if (jXPanel6.isVisible()) {
    jXPanel6.setVisible(true);
}
else {
    jXPanel6.setVisible(false);
}

который, конечно, можно сократить до

jXPanel6.setVisible(jXPanel6.isVisible());

Оба этих последних выражения для меня более читабельны тем, что они более четко сообщают, что именно вы пытаетесь сделать. (И, между прочим, вы случайно не изменили свои условия? Похоже, что это не операция, а не переключение).

Не смешивайте количество символов с читабельностью. Ключевым моментом является то, что наиболее легко понять; и мягко злоупотреблять языковыми особенностями - это определенный способ сбить с толку читателей или, по крайней мере, заставить их сделать ментальное двойное взятие.

Ответ 2

jXPanel6.setVisible(jXPanel6.isVisible());

или в вашей форме:

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);

Ответ 3

Тернарный оператор может быть только правой частью задания, а не его собственным выражением.

http://www.devdaily.com/java/edu/pj/pj010018/

Ответ 4

Как указывали другие, что-то вроде формы

x ? y : z

- выражение, а не (полное) утверждение. Это значение rvalue, которое нужно использовать где-то - например, в правой части задания или параметр для функции и т.д.

Возможно, вы могли бы посмотреть на это: http://download.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html

Ответ 5

Я немного опаздываю на вечеринку, но будущим читателям.

Из того, что я могу сказать, вы просто хотите правильно переключить состояние видимости? Почему бы просто не использовать оператор !?

jxPanel6.setVisible(!jxPanel6.isVisible);

Это не оператор if, но я предпочитаю этот метод для кода, связанного с вашим примером.