/
Программирование
/
Курс Java
/

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

Java: Условная конструкция (if)

Логические выражения умеют проверять разные условия. Но сами по себе они лишь возвращают true или false. Чтобы программа выполняла разные действия в зависимости от результата, в Java есть конструкция if.

if (5 > 3) {
    System.out.println("Yes, it is true");
}

Здесь строка "Yes, it is true" напечатается, потому что условие 5 > 3 истинно.

┌──────────┐
│ условие? │
└─────┬────┘
      │ true
      ↓
┌──────────┐
│ тело if  │
└──────────┘

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

Блоки кода

Все инструкции внутри фигурных скобок образуют один блок. Они выполняются вместе, когда условие истинно.

if (10 == 10) {
    System.out.println("First");
    System.out.println("Second");
}

System.out.println("Goodbye!");

Здесь напечатаются "First" и "Second", потому что условие выполнилось. А "Goodbye!" напечатается в любом случае, ведь эта строка уже за пределами блока. Принцип такой же, как и в определении методов.

Использование if внутри метода

Напишем метод, который определяет тип переданного предложения. Если предложение оканчивается знаком вопроса, метод вернет "question", иначе вернет "general":

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

    return "general";
}

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

Здесь работают сразу два return. Если условие внутри if выполняется, срабатывает return "question", и метод завершается. Если условие ложно, блок пропускается, и управление переходит на строку с return "general".

У метода получается несколько точек выхода. Это частая практика. В зависимости от условия метод завершается по-разному.

Метод getTypeOfSentence использует if, но возвращает строки, поэтому предикатом не считается. В качестве предиката рассмотрим метод, который проверяет, хватает ли денег для покупки:

public static boolean hasEnoughMoney(int balance, int price) {
    if (balance >= price) {
        return true;
    }

    return false;
}

App.hasEnoughMoney(100, 50); // true
App.hasEnoughMoney(30, 50);  // false

if и логические выражения

Метод hasEnoughMoney мы написали через if. Но в таком виде он мог бы обойтись и без него, ведь результат сравнения сам по себе уже логическое выражение:

public static boolean hasEnoughMoney(int balance, int price) {
    return balance >= price;
}

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

Задание

Реализуйте метод getSentenceTone(), который принимает строку и определяет тон предложения. Если все символы в верхнем регистре, то это вопль — scream. В ином случае — нормальное предложение — normal.

Примеры вызова:

App.getSentenceTone("Hello"); // "normal"
App.getSentenceTone("WOW");  // "scream"

Алгоритм:

  1. Сгенерируйте строку в верхнем регистре на основе строки-аргумента с помощью toUpperCase().
  2. Сравните её с исходной строкой:
    • Если строки равны, значит, строка-аргумент в верхнем регистре
    • В ином случае — строка-аргумент не в верхнем регистре

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются