Short IF - ELSE заявление - PullRequest
       2

Short IF - ELSE заявление

76 голосов
/ 16 декабря 2010

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

Вот мой код, который не работает («не утверждение»):

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

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

Ответы [ 5 ]

202 голосов
/ 16 декабря 2010

«троичное выражение» 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());

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

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

27 голосов
/ 16 декабря 2010
jXPanel6.setVisible(jXPanel6.isVisible());

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

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);
3 голосов
/ 16 декабря 2010

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

x ? y : z

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

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

3 голосов
/ 16 декабря 2010

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

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

2 голосов
/ 10 мая 2015

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

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

jxPanel6.setVisible(!jxPanel6.isVisible);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...