Как называется оператор Java?: И что он делает? - PullRequest
138 голосов
/ 28 апреля 2009

Я работал с Java пару лет, но до недавнего времени я не сталкивался с этой конструкцией:

int count = isHere ? getHereCount(index) : getAwayCount(index);

Это, наверное, очень простой вопрос, но кто-нибудь может это объяснить? Как мне это прочитать? Я почти уверен, что знаю, как это работает.

  • если isHere верно, getHereCount() вызывается,
  • если isHere ложно getAwayCount() вызывается.

Правильно? Как называется эта конструкция?

Ответы [ 15 ]

1 голос
/ 03 сентября 2018

На самом деле это может занять более 3 аргументов. Например, если мы хотим проверить, является ли число положительным, отрицательным или нулевым, мы можем сделать это:

String m= num > 0 ? "is a POSITIVE NUMBER.": num < 0 ?"is a NEGATIVE NUMBER." :"IT's ZERO.";

что лучше, чем использование if, else if, else.

1 голос
/ 28 апреля 2009

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

String s = mayBeNull?.toString() ?: "null";

Было бы особенно удобно, когда происходит автоматическая распаковка.

Integer ival = ...;  // may be null
int i = ival ?: -1;  // no NPE from unboxing

Он был выбран для дальнейшего рассмотрения в соответствии с "Монетой проекта" JDK 7

.
0 голосов
/ 28 апреля 2009

Мне очень нравится этот оператор, но читатель должен быть принят во внимание.

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

Прежде всего, это дело Первоначального Аскера. Он просто час писал об этом и читал ответы. Сколько времени понадобилось бы автору, чтобы написать каждый? Как если бы / то на протяжении всей его жизни. Не час, чтобы быть уверенным.

Во-вторых, в С-подобных языках вы привыкли просто знать, что условные выражения - это первое, что стоит в строке. Я заметил это, когда использовал Ruby, и наткнулся на строки вроде:

callMethodWhatever(Long + Expression + with + syntax) if conditional

Если бы я был пользователем Ruby долгое время, у меня, вероятно, не было бы проблемы с этой строкой, но, если исходить из C, когда вы видите "callMethodWhwhat" в качестве первой вещи в строке, вы ожидаете, что она будет выполнена. ?: Менее загадочный, но все же достаточно необычный, чтобы отбросить читателя.

Преимущество, однако, заключается в том, что у вас в животике действительно здорово, когда вы можете написать 3-строчный оператор if в интервале 1 из строк. Не могу этого отрицать :) Но, честно говоря, не обязательно более читабельно для 90% людей просто из-за его редкости.

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

0 голосов
/ 28 апреля 2009

Это условный оператор, и это больше, чем просто краткий способ написания операторов if.

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

0 голосов
/ 28 апреля 2009

Да, вы правы. ?: обычно называется «троичным условным оператором», часто называемым просто «троичным оператором». Это сокращенная версия стандарта if / else условная.

Тернарный условный оператор

...