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

Вкратце

if (условие) {
  // код, который будет выполнен
  // если условие истинно
}

Задача предиката — получить ответ на вопрос, но обычно коду, вызывающему предикат, этого не достаточно и нужно выполнить определенное действие в зависимости от ответа.

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

public static void main(String[] args) {
  getTypeOfSentence("Hodor"); // => "normal"
  getTypeOfSentence("Hodor?"); // => "question"
}

static String getTypeOfSentence(String sentence) {
    var lastChar = sentence.charAt(sentence.length() - 1); // способ извлечь последний символ
    if (lastChar == '?') { //lastChar имеет тип "символ", а не "строка", символы сравнивают через ==
        return "question";
    }

    return "normal";
}

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

Если предикат вычислился в значение false, то блок кода в фигурных скобках пропускается, и функция продолжает свое выполнение дальше.

В нашем случае следующая строчка кода — return "normal"; — заставит функцию вернуть строку и завершиться.

А вот если выражение, которое проверялось в if, оказалось равно true, тогда выполняется блок внутри {} при операторе if, и оператор return "question". В нормальных обстоятельствах после выполнения этого блока {} продолжилось бы выполнение функции со следующего оператора после if. Но оператор return внутри if заставляет функцию вернуть “question” в качестве своего значения, и далее не выполняться. Поэтому return "normal" уже не будет выполнено.

Как видите, return может находиться где угодно в функции. В том числе внутри блока кода с условием.


Если в фигурных скобках после if содержится только одна строчка кода, то фигурные скобки можно не писать и сделать так:

public static void main(String[] args) {
    System.out.println(getTypeOfSentence("Hodor")); // => normal
    System.out.printl(getTypeOfSentence("Hodor?")); // => question
}

static String getTypeOfSentence(String sentence) {
      var lastChar = sentence.charAt(sentence.length() - 1); // способ извлечь последний символ
      if (lastChar == '?')
          return "question";

      return "normal";
  }

Советуем не делать так и всегда писать фигурные скобки. В таком случае явно видно, где начинается и заканчивается тело условия. Код становится более чётким и понятным.

Задание

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

Алгоритм:

  1. Сгенерируйте строку в верхнем регистре на основе строки-аргумента str с помощью str.toUpperCase().
  2. Сравните её с исходной строкой:

    • Если строки равны, значит строка-аргумент в верхнем регистре.
    • В ином случае строка-аргумент не в верхнем регистре.

Нашли ошибку? Есть что добавить? Пулреквесты приветствуютсяhttps://github.com/hexlet-basics

Упражнение доступно только авторизованным пользователям.

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