Я работал с Java пару лет, но до недавнего времени я не сталкивался с этой конструкцией:
int count = isHere ? getHereCount(index) : getAwayCount(index);
Вероятно, это очень простой вопрос, но кто-нибудь может это объяснить? Как мне это прочитать? Я уверен, что знаю, как это работает.
- если
isHere
это правда,getHereCount()
называется, - если
isHere
ложьgetAwayCount()
называется.
Верный? Как называется эта конструкция?
java
syntax
ternary-operator
conditional-operator
mainstringargs
источник
источник
Ответы:
Да, это сокращенная форма
Это называется условный оператор . Многие (ошибочно) называют его троичным оператором , потому что это единственный троичный оператор (с тремя аргументами) в Java, C, C ++ и, возможно, во многих других языках. Но теоретически может быть другой троичный оператор, тогда как может быть только один условный оператор .
Официальное название дано в Спецификации языка Java :
Обратите внимание, что обе ветви должны приводить к методам с возвращаемыми значениями:
Итак, если
doSomething()
иdoSomethingElse()
являются пустыми методами, вы не можете сжать это:в это:
Простые слова:
источник
the
в курсивthe ternary operator
, и это означает , что он ошибочен, а неternary operator
ошибочен. Троичный оператор предполагает , что, как говорит Майкл, это только один, который , в свою очередь , может привести к предположению , что не может быть никаких других тройные операторов, является то , что Майкл говорит , является ошибочным, и я согласен, это было бы ошибочное предположение.Другие ответили на это в разумной степени, но часто с названием «троичный оператор».
Будучи педантом, которым я являюсь, я хотел бы прояснить, что имя оператора - это условный оператор или «условный оператор?». Это троичный оператор (в том , что он имеет три операнда) , и это случается только тройной оператор в Java на данный момент.
Тем не менее, спецификация довольно ясно, что ее имя является условным оператором или «условным оператором?», Чтобы быть абсолютно однозначным. Я думаю, что более понятно называть его этим именем, поскольку оно указывает на поведение оператора в некоторой степени (оценивает условие), а не просто на то, сколько у него операндов.
источник
&&
оператор условного оператора и оператор||
условного оператора или, но использует только «условный оператор» для?:
.Согласно спецификации Sun Java , он называется условным оператором. Смотрите раздел 15.25. Вы правы относительно того, что он делает.
Условный оператор? : использует логическое значение одного выражения, чтобы решить, какое из двух других выражений должно быть оценено.
Условный оператор синтаксически справа ассоциативен (он группируется справа налево), так что a? B: c? D: e? F: g означает то же самое, что и a b: (c? D: (e? F) :грамм)).
Условный оператор имеет три выражения операнда; ? появляется между первым и вторым выражениями, а: появляется между вторым и третьим выражениями.
Первое выражение должно иметь тип boolean или Boolean, иначе произойдет ошибка времени компиляции.
источник
средства :
источник
Не совсем правильно, если быть точным:
Это «вернулся» очень важно. Это означает, что методы должны возвращать значение, и это значение должно быть где-то назначено.
Кроме того, это не совсем синтаксически эквивалентно версии if-else. Например:
Если закодировано с помощью if-else, всегда будет получаться больше байт-кода.
источник
Тройной, условный; помидор, томат. Для чего это действительно ценно - это инициализация переменных. Если (как и я) вам нравится инициализировать переменные там, где они определены, то условный троичный оператор (для него обоих) позволяет вам делать это в тех случаях, когда существует условие относительно его значения. Особенно примечателен в финальных полях, но полезен и в других местах.
например:
Без этого оператора - по какому-либо имени - вам пришлось бы сделать поле не финальным или написать функцию просто для его инициализации. На самом деле, это не так - его все еще можно инициализировать, используя if / else, по крайней мере, в Java. Но я нахожу это чище.
источник
Если условие выполняется,
true
вычислите первое выражение. Если условиеfalse
, оцените второе выражение.Он называется условным оператором и является типом троичной операции .
источник
Эта конструкция называется троичным оператором в области компьютерных наук и методов программирования.
И Википедия предлагает следующее объяснение:
Этот синтаксис доступен не только в Java, но и в Objective-C.
В следующей ссылке приведено следующее объяснение, которое приятно понять:
Это может быть читаемо для некоторых логических условий, которые не слишком сложны, иначе лучше использовать блок If-Else с предполагаемой комбинацией условной логики.
С помощью этого тернарного оператора мы можем упростить блоки If-Else для одной строки оператора кода.
Например:
Может быть равным следующему:
Итак, если мы ссылаемся на ваше заявление:
На самом деле это 100% эквивалент следующего блока If-Else :
Это оно!
Надеюсь, это было полезно для кого-то!
Ура!
источник
Верный. Это называется троичным оператором . Некоторые также называют это условным оператором .
источник
Его троичный оператор (? :)
источник
Возможно, вас заинтересует предложение о некоторых новых операторах, похожих на условный оператор. Нуль-безопасные операторы включат код следующим образом:
Было бы особенно удобно, когда происходит автоматическая распаковка.
Он был выбран для дальнейшего рассмотрения в рамках проекта JDK 7 «Монета проекта».
источник
На самом деле это может занять более 3 аргументов. Например, если мы хотим проверить, является ли число положительным, отрицательным или нулевым, мы можем сделать это:
что лучше, чем использование if, else if, else.
источник
Это условный оператор, и это больше, чем просто краткий способ написания операторов if.
Поскольку это выражение, которое возвращает значение, его можно использовать как часть других выражений.
источник
Да вы правы. ?: обычно называется «троичным условным оператором», часто называемым просто «троичным оператором». Это сокращенная версия стандарта if / else условная.
Тернарный условный оператор
источник
Мне очень нравится этот оператор, но читатель должен быть принят во внимание.
Вы всегда должны уравновешивать компактность кода со временем, потраченным на его чтение, и в этом есть некоторые довольно серьезные недостатки.
Прежде всего, это дело Первоначального Аскера. Он просто час писал об этом и читал ответы. Сколько времени понадобилось бы автору, чтобы написать каждый? Как если бы / то на протяжении всей его жизни. Не час, чтобы быть уверенным.
Во-вторых, в C-подобных языках вы привыкли просто знать, что условные выражения - это первое, что есть в строке. Я заметил это, когда использовал Ruby и наткнулся на такие строки:
Если бы я долгое время был пользователем Ruby, у меня, вероятно, не было бы проблемы с этой строкой, но, если исходить из C, когда вы видите в качестве первой в строке «callMethodWhwhat», вы ожидаете, что она будет выполнена. ?: Менее загадочный, но все же достаточно необычный, чтобы отбросить читателя.
Преимущество, однако, в том, что вы можете написать 3-строчный оператор if в интервале 1 из строк. Не могу этого отрицать :) Но, честно говоря, не обязательно более читабельно 90% людей там просто из-за его редкости.
Когда это действительно присвоение, основанное на логических значениях и значениях, у меня нет проблем с ним, но им легко злоупотреблять.
источник
Условные выражения выполняются в совершенно другом стиле, без явного выражения if.
Синтаксис: логическое выражение? выражение1: выражение2;
Результатом этого условного выражения является
expression1, если логическое выражение имеет значение true;
в противном случае результатом является выражение2.
Предположим, вы хотите присвоить большее количество переменных num1 и num2 максимальному значению. Вы можете просто написать оператор, используя условное выражение: max = (num1> num2)? число1: число2;
Примечание: символы? и: появляются вместе в условном выражении. Они образуют условный оператор и также называются троичным оператором, потому что он использует три операнда. Это единственный троичный оператор в Java.
цитируется с: Введение в программирование на Java, 10-е издание, Y. Daniel Liang стр. 126 - 127
источник