Вероятно, это очень простой вопрос, но кто-нибудь может его объяснить? Как мне его прочитать? Я почти уверен, что знаю, как это работает.
если isHere имеет значение true, getHereCount() вызывается,
вызывается, если isHere равно false getAwayCount().
Правильно? Как называется эта конструкция?
Переведено автоматически
Ответ 1
Да, это сокращенная форма
int count; if (isHere) count = getHereCount(index); else count = getAwayCount(index);
Это называется условный оператор. Многие люди (ошибочно) называют это троичным оператором, потому что это единственный троичный оператор (с тремя аргументами) в Java, C, C ++ и, вероятно, многих других языках. Но теоретически может существовать другой троичный оператор, тогда как может быть только один условный оператор.
Условный оператор ? : использует логическое значение одного выражения, чтобы решить, какое из двух других выражений следует вычислить.
Обратите внимание, что обе ветви должны приводить к методам с возвращаемыми значениями:
Это ошибка времени компиляции, поскольку либо второе, либо третье выражение-операнд является вызовом метода void.
Фактически, согласно грамматике операторов expression (§14.8), условному выражению не разрешается появляться в любом контексте, где может появиться вызов метода void.
Итак, если doSomething() и doSomethingElse() являются методами void , вы не можете сжать это:
if (someBool) doSomething(); else doSomethingElse();
Другие отвечали на этот вопрос в разумных пределах, но часто с названием "троичный оператор".
Будучи педантом, которым я являюсь, я хотел бы прояснить, что имя оператора - условный оператор или "conditional operator ?:". Это троичный оператор (в том смысле, что у него три операнда), и на данный момент это единственный троичный оператор в Java.
Однако в спецификации довольно ясно, что его имя - условный оператор или "conditional operator ?:", чтобы быть абсолютно однозначным. Я думаю, что понятнее называть его этим именем, поскольку оно в некоторой степени указывает на поведение оператора (вычисление условия), а не просто на то, сколько у него операндов.
Ответ 3
Согласно спецификации Sun Java, он называется условным оператором . Смотрите Раздел 15.25 . Вы правы относительно того, что он делает.
Условный оператор ? : использует логическое значение одного выражения, чтобы решить, какое из двух других выражений следует вычислить.
Условный оператор синтаксически ассоциативен с правом (он группирует справа налево), так что a?b: c?d: e?f: g означает то же самое, что и a?b:(c?d:(e?f: g)).