Тернарный оператор Java за три минуты — SitePoint

Java

  • Синтаксис
  • Примеры
  • Вложение нескольких операторов
  • Краткое содержание
  • Комментарии

Тернарный оператор является формой синтаксического сахара для if -then- еще утверждений. Он также известен как условный оператор, что, возможно, является более значимым названием, поскольку оно оценивает такие условия, как , если выполняется . При осторожном использовании оператора он может сделать код более кратким, не жертвуя читабельностью.

Эта статья требует от вас четкого понимания того, как операторы if работают в Java.

Тернарный оператор

Тернарный оператор оценивает условие и выбирает одну из двух ветвей для выполнения. Как и во многих других языках программирования, ? и : символов используются для его формирования. Другие общие имена, которые вы можете встретить и которые относятся к той же концепции, это inline if , ternary if и условный оператор .

Синтаксис

Имя троичный указывает на то, что оператор принимает три операнда.

 состояние ? exprTrue : exprFalse
 

Условие

является логическим выражением, которое оценивается как true или ложь . Оба, exprTrue и exprFalse , также являются выражениями, но они могут оцениваться во что угодно (кроме void ). Если условие true , тернарный оператор оценивает exprTrue . В противном случае оценивается exprFalse .

Тернарный оператор представляет собой выражение (например, цена + 20 ), что означает, что после выполнения он имеет значение. И это значение необходимо использовать в дальнейшем, например, присвоив его переменной или вернув из метода, иначе выражение не скомпилируется.

Стоит отметить, что оператор ленив в том смысле, что оценивается только используемое выражение: тернарный оператор не будет оценивать неиспользуемую ветвь.

Примеры

Как видите, основная структура очень похожа на оператор if -then- else , но сжата до одной строки. Давайте посмотрим на конкретный пример. Он демонстрирует, как простой оператор if -then- else можно заменить тернарным оператором.

 инт цена;
если (премиум-член()) {
    цена = 80;
}
еще {
    цена = 100;
}
// эквивалентно
int цена = isPremiumMember() ? 80 : 100;
 

Переменная price

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

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

 целая цена () {
    если (премиум-член()) {
        вернуть 80;
    }
    еще {
        вернуть 100;
    }
}
 

Можно заменить на

 int price() {
    вернуть isPremiumMember() ? 80 : 100;
}
 

Обновленный метод price стал значительно короче и разборчивее, чем раньше.

Вложение нескольких операторов

Java позволяет вкладывать один условный оператор в другой. Однако будьте осторожны при этом. Вложенные условные операторы могут затруднить чтение.

 целая сумма = 10;
Результат строки = сумма <= 2 ? "пара" : количество > 2 && количество < 5 ? "несколько" : количество <= 5 ? "несколько" : "много";
 

Хотя пример можно улучшить с помощью форматирования, иногда лучше избегать использования тернарного оператора и использовать старый добрый , если - то- , иначе , или маршрут оператора switch.

Резюме

Вы узнали, что тернарный оператор позволяет сократить , если -затем- else заявление в одну строку условие ? Истина : Ложь . Если все сделать с умом, это сделает код более лаконичным и улучшит читабельность.

Однако меньше строк кода не всегда лучше. Легко злоупотреблять тернарным оператором и сделать ваш код менее читаемым. Руководствуйтесь здравым смыслом и имейте в виду, что программы должны быть написаны для того, чтобы их могли читать люди, и только случайно для машин. Более читаемым способом выражения условий, особенно если их много, может быть оператор switch.

Поделиться этой статьей

Индрек Отс

Разработчик программного обеспечения, аппаратный хакер, интересуется машинным обучением, бегун на длинные дистанции.

    control flownicolaipquick-tip

    Как использовать тернарный условный оператор в строках запроса

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

    Оператор похож на встроенный if-then-else кодовый блок.

    Синтаксис тернарного условного оператора: состояние ? выражениеIfTrue : выражениеIfFalse

    Знак вопроса ( ? ) отделяет условие от выражений, а двоеточие ( : ) отделяет выражение, оцениваемое, когда условие истинно, от выражения, оцениваемого, когда условие ложно.

    Выражение x ? y : z оценивается следующим образом:

    • Если x истинно, выражение оценивается как y .
    • Если x ложно, выражение оценивается как z .

    Пример​

    Бюджет строителя дома составляет 3,50 доллара за досковый фут на закупку пиломатериалов, и он хотел бы знать, какие породы древесины входят в его бюджет. Мы можем использовать тернарный оператор для создания новой таблицы со столбцом «да» или «нет», который отвечает, соответствует ли тип древесины бюджетным ограничениям.

     леса = новаяТаблица( 
    stringCol("Тип", "Сосна", "Пихта", "Кедр", "Дуб", "Ясень", "Орех", "Бук", "Вишня"),
    stringCol("Твердость", "мягкий" , "мягкий", "мягкий", "жесткий", "жесткий", "жесткий", "жесткий", "жесткий"),
    doubleCol("Цена", 1,95, 2,50, 3,25, 3,45, 4,25, 7,95 , 4,10 , 5.25)
    )

    result = woods.update("Budget = (Price<=3.50) ? `yes` : `no` ")

    • woods
    • result

    Для более сложных случаев , троичные операторы if могут быть вложенными. Например:

    условие1 ? (условие2 ? значение1 : значение2) : значение3

    Выражение x ? (y ? 1 : 2) : 3 оценивается следующим образом:

    • Если и x , и y истинны, выражение оценивается как 1. , выражение оценивается как 2.
    • Если x ложно, выражение оценивается как 3.

    Пример​

    Бюджет строителя дома составляет 3,50 долл. какие виды древесины находятся в пределах их бюджета. Мы можем использовать вложенные тернарные операторы для создания новой таблицы с да или нет Столбец, который отвечает, соответствует ли тип древесины как бюджетным ограничениям, так и твердой древесине.

    В этом примере столбец Возможный

    оценивается как да , только если древесина является твердой и цена меньше 3,50 долларов США. В противном случае древесина не предлагается как возможность для клиента.

     result = woods.update("Возможно = (Hardness == `hard`) ? ( (Price <= 3.50) ? `yes` : `no` ) : `no` ") 
    • результат

    Если твердая древесина является требованием, но бюджет является гибким, можно использовать вложенные тройные операторы if для классификации твердой древесины как бюджетной или дорогой , а все другие типы древесины как нет .