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

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

    Все условия в выражении if/else для healthStatus, по сути, проверяют целочисленное значение healthPoints. В некоторых используется оператор сравнения для проверки равенства healthPoints какому-то значению, в других используется несколько операторов сравнения, чтобы проверить, попадает ли значение healthPoints в интервал между двумя числами. Для второго случая есть альтернатива получше: Kotlin предусматривает интервалы для представления линейного набора значений.

    Интервал определяется оператором .., например 1..5. Интервал включает все значения, начиная с находящегося слева от оператора .. и заканчивая находящимся справа. Например, 1..5 включает числа 1, 2, 3, 4 и 5. Интервалы могут представлять последовательности символов.

    Для проверки попадания заданного числа в интервал можно использовать ключевое слово in (внутри). Произведем рефакторинг выражения healthStatus и используем интервалы вместо операторов сравнения.

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


Рис.1. Рефакторинг healthStatus для использования интервалов (Game.kt)


Бонус: использование интервалов в условных выражениях, как показано выше, решает проблему с порядком выполнения else if, которую мы наблюдали в предыдущих шагах. С интервалами ваши ветви могут располагаться в любом порядке, и код все равно будет работать одинаково.

    Кроме оператора .. существуют еще несколько функций создания интервалов. Функция downTo() создает убывающий интервал. Функция until() создает интервал, не включающий верхнюю границу выбранного диапазона. Мы разберем эти функции чуть позже.

    На следующем шаге мы рассмотрим условное выражение when.




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