Шаг 24.
Основы Kotlin.
Условные конструкции. Условные выражения

    На этом шаге мы рассмотрим назначение и использование теких конструкций.

    Теперь оператор if/else не только отображает состояние здоровья игрока, но также добавляет небольшое уточнение.

    С другой стороны, код получился немного громоздким, потому что во всех ветвях используются похожие инструкции println(). А теперь представьте, что потребовалось изменить общий формат сообщения о состоянии игрока. Вам придется пройтись по каждой ветке в операторе if/else и изменить сообщение в каждом вызове функции println().

    Проблему можно решить, заменив оператор if/else условным выражением. Условное выражение - это почти условный оператор, с той лишь разницей, что результат оператора if/else присваивается переменной, которая будет использоваться в дальнейшем. Обновите вывод о состоянии здоровья, чтобы увидеть, как это работает.

fun main() {
    .    .    .     .
    val healthStatus = if (healthPoints == 100) {
        " is in excellent condition!"
    } else if (healthPoints >= 90) {
        " has a few scratches."
    } else if (healthPoints >= 75) {
        if (isBlessed) {
            " has some minor wounds but is healing quite quickly!"
        }  else {
            " has some minor wounds."
        }
    } else if (healthPoints >= 15) {
        " looks pretty hurt."
    } else {
        " is in awful condition!"
    }
    // Состояние игрока
    println(name + " " + healthStatus)
}
Файл с проектом можно взять здесь.


Рис.1. Использование условного выражения (Game.kt)


Если вам надоело расставлять отступы в коде после каждого изменения, IntelliJ может помочь. Выберите Code | Auto-Indent Lines и наслаждайтесь четкими отступами.

    Посредством выражения if/else новой переменной healthStatus присваивается строковое значение "is in excellent condition!" и т. п. в зависимости от значения healthPoints. В этом вся прелесть условного выражения. Так как теперь состояние игрока записывается в переменную healthStatus, можно убрать шесть одинаковых по смыслу инструкций println().

    Если переменная должна получить значение в зависимости от условия, лучше всего использовать условное выражение. Запомните: условные выражения выглядят проще, если все ветви возвращают значения одного типа (например, строки для healthStatus).

    Код, описывающий ауру, также можно упростить с помощью условного выражения. Так и сделаем.

fun main() {
    .    .    .     .
    // Аура
    val auraVisible = isBlessed && healthPoints > 50 || isImmortal
    val auraColor = if (auraVisible) "GREEN" else "NONE"
    println(auraColor)
    .    .    .     .
}
Файл с проектом можно взять здесь.


Рис.2. Улучшение кода ауры с помощью условного выражения

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

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

    На следующем шаге мы рассмотрим, куда исчезли скобки в выражениях if/else.




Предыдущий шаг Содержание Следующий шаг