Вопрос-ответ

What is the Java ?: operator called and what does it do?

Что такое Java ?: вызываемый оператор и что он делает?

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

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

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


  • если isHere имеет значение true, getHereCount() вызывается,

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

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

Переведено автоматически
Ответ 1

Да, это сокращенная форма

int count;
if (isHere)
count = getHereCount(index);
else
count = getAwayCount(index);

Это называется условный оператор. Многие люди (ошибочно) называют это троичным оператором, потому что это единственный троичный оператор (с тремя аргументами) в Java, C, C ++ и, вероятно, многих других языках. Но теоретически может существовать другой троичный оператор, тогда как может быть только один условный оператор.

Официальное название дано в спецификации языка Java:


§15.25 Условный оператор ? :


Условный оператор ? : использует логическое значение одного выражения, чтобы решить, какое из двух других выражений следует вычислить.


Обратите внимание, что обе ветви должны приводить к методам с возвращаемыми значениями:


Это ошибка времени компиляции, поскольку либо второе, либо третье выражение-операнд является вызовом метода void.


Фактически, согласно грамматике операторов expression (§14.8), условному выражению не разрешается появляться в любом контексте, где может появиться вызов метода void.


Итак, если doSomething() и doSomethingElse() являются методами void , вы не можете сжать это:

if (someBool)
doSomething();
else
doSomethingElse();

в это:

someBool ? doSomething() : doSomethingElse();

Простые слова:

booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse 
Ответ 2

Другие отвечали на этот вопрос в разумных пределах, но часто с названием "троичный оператор".

Будучи педантом, которым я являюсь, я хотел бы прояснить, что имя оператора - условный оператор или "conditional operator ?:". Это троичный оператор (в том смысле, что у него три операнда), и на данный момент это единственный троичный оператор в Java.

Однако в спецификации довольно ясно, что его имя - условный оператор или "conditional operator ?:", чтобы быть абсолютно однозначным. Я думаю, что понятнее называть его этим именем, поскольку оно в некоторой степени указывает на поведение оператора (вычисление условия), а не просто на то, сколько у него операндов.

Ответ 3

Согласно спецификации Sun Java, он называется условным оператором . Смотрите Раздел 15.25 . Вы правы относительно того, что он делает.

Условный оператор ? : использует логическое значение одного выражения, чтобы решить, какое из двух других выражений следует вычислить.

Условный оператор синтаксически ассоциативен с правом (он группирует справа налево), так что a?b: c?d: e?f: g означает то же самое, что и a?b:(c?d:(e?f: g)).

ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression

Условный оператор имеет три выражения-операнда; ? появляется между первым и вторым выражениями, и : появляется между вторым и третьим выражениями.

Первое выражение должно иметь тип boolean или Логическое значение, иначе возникает ошибка времени компиляции.

Ответ 4
condition ? truth : false;

Если условие равно true, то вычислите первое выражение. Если условие равно false, вычислите второе выражение.

Это называется условный оператор и это тип троичной операции.

2023-07-12 04:30 java