Главная » Java » Условный оператор?: Java

0

Условный оператор, ?:, возвращает одно из двух значений в зависимости от

результата проверки заданного булева выражения. Например, выражение

value = (userSetlt ? usersValue : defaultValue); равнозначно следующей конструкции:

if (usersetIt)

value = usersValue; else

value = defaultValue;

Основное различие между условными выражением if и оператором?: состоит в том, что последний возвращает значение и поэтому может использоваться в качестве операндов других выражений. Применение условного оператора зачастую позволяет существенно сократить объем кода, но программисты не могут прийти к единому мнению насчет того, становится ли такой код более понятным. Мы, например, используем и одну конструкцию, и другую, в зависимости от того, какая из них в конкретных условиях выглядит Более подходящей. Заключать ли оператор или его аргументы в скобки – ответ на этот вопрос неоднозначен и зависит от стиля работы и личных предпочтений программиста. Формально применение скобок не требуется.

Второй и третий аргументы оператора?: (т.е. те, которые им возвращаются) должны относиться к совместимым типам. Тип одного операнда обязан допускать присваивание значений другого операнда без необходимости явного преобразования типов – независимо от того, значения какого именно из двух типов могут присваиваться другому. Результат операции относится к более общему из двух типов. Например, в выражении

double scale = (halvelt ? 1 : 0.5);

один из возвращаемых операндов относится к типу int (1), а другой – к doublе (0.5). Переменные doublе допускают присваивание значений типа int, поэтому 1 преобразуется в 1.0, Т.е. результатом выражения будет значение типа doublе. Это правило справедливо и для ссылочных типов, если переменным одного, "более" базового, типа разрешается присваивать значения другого типа. Если же ни одна из двух возможных операций присваивания невыполним а, выражение считается неверным.

Благодаря своей форме условный оператор заслужил дополнительное название – вопрос-двоеточие. Наконец, уникальность условного оператора обусловлена еще и тем, что это единственный тернарный (ternary) оператор (оператор с тремя аргументами) в языке Jаvа.

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии