Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Условные конструкции Основы Java

Условная конструкция if

Условные конструкции позволяют выполнять разный код, основываясь на логических проверках. Посмотрим на таком типичном примере:

  • Человек хочет оплатить покупку с карты
  • Если на счету есть деньги, то нужная сумма спишется автоматически
  • Если денег нет, то операция будет отклонена

Конструкция if

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

public static String getTypeOfSentence(String sentence) {
    if (sentence.endsWith("?")) {
        return "question";
    }

    return "general";
}

App.getTypeOfSentence("Hodor");  // "general"
App.getTypeOfSentence("Hodor?"); // "question"

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

Если условие не выполняется, то блок кода в фигурных скобках пропускается, и метод продолжает свое выполнение дальше. В нашем случае следующая строчка кода — return "general"; — заставит метод вернуть строку и завершиться.

Конструкция if-else

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

if (x > 5) {
    // Если условие true
} else {
    // Если условие false
}

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

// Здесь приходит email

if (email.equals("")) { // Если email пустой, то ставим дефолт
    email = "support@hexlet.io";
} else { // Иначе выполняем нормализацию
    email = email.trim().toLowerCase();
}

// Здесь используем эту почту

Если ветка if содержит return, то else становится не нужен — его можно просто опустить:

if (/* условие */) {
    return /* какое-то значение */;
}

// Продолжаем что-то делать, потому что else не нужен

Конструкция else if

В самой полной версии конструкция if содержит не только ветку else, но и другие условные проверки с помощью else if. Такой вариант используется при большом количестве проверок, которые взаимоисключают друг друга:

if (/* что-то */) {

} else if (/* другая проверка */) {

} else if (/* другая проверка */) {

} else {

}

Здесь стоит обратить внимание на два момента:

  • Ветка else может отсутствовать
  • Количество else if условий может быть любым

Напишем для примера расширенный метод определяющий тип предложения. Он распознает три вида предложений:

App.getTypeOfSentence("Who?"); // "Sentence is question"
App.getTypeOfSentence("No");   // "Sentence is general"
App.getTypeOfSentence("No!");  // "Sentence is exclamation"

public static String getTypeOfSentence(String sentence)
{
    var sentenceType = "";

    if (sentence.endsWith("?")) {
        sentenceType = "question";
    } else if (sentence.endsWith("!")) {
        sentenceType = "exclamation";
    } else {
        sentenceType = "general";
    }

    return "Sentence is " + sentenceType;
}

https://replit.com/@hexlet/java-basics-if-else

Теперь все условия выстроены в единую конструкцию. Оператор else if — это «если не выполнено предыдущее условие, но выполнено текущее». Получается такая схема:

  • Если последний символ ?, то "question"
  • Иначе, если последний символ !, то "exclamation"
  • Иначе "general"

В итоге выполнится только один из блоков кода, относящихся ко всей конструкции if.

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

Посмотрите на определение метода, который возвращает модуль переданного числа:

// Если больше нуля, то выдаем само число. Если меньше, то убираем знак
public static int abs(int number) {
    if (number >= 0) {
        return number;
    }

    return -number;
}

App.abs(10);  // 10
App.abs(-10); // 10

В Java существует конструкция, которая по своему действию аналогична конструкции if-else, но при этом является выражением. Она называется тернарный оператор.

Тернарный оператор — единственный в своем роде оператор, требующий три операнда. Он помогает писать меньше кода для простых условных выражений. Наш пример выше с тернарным оператором превращается в три строки кода:

public static int abs(int number) {
    return number >= 0 ? number : -number;
}

Общий шаблон выглядит так:

<predicate> ? <expression on true> : <expression on false>

То есть сначала мы записываем логическое выражение, а дальше два разных варианта поведения:

  1. Если условие истинно, выполняет вариант до двоеточия
  2. Если условие ложно, выполняет вариант после двоеточия

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


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Java-разработчик
Профессия
с нуля
Разработка приложений на языке Java
2 февраля 10 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»