Шаг 21.
Основы Kotlin.
Условные конструкции. Добавление условий

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

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

    Чтобы сделать оператор if/else более точным, можно добавить больше условий для проверки и больше ветвей для всех возможных результатов. Этого можно добиться с помощью оператора else if, синтаксис которого похож на if (от if до else). Добавьте в оператор if/else три ветви else if, проверяющие промежуточные значения healtPoints.

fun main() {
    val name = "Madrigal"
    var healthPoints = 89

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


Рис.1. Проверка большего числа состояний здоровья игрока (Game.kt)

    Как выглядит новая логика (таблица 1):

Таблица 1. Логика здоровья игрока
Если у героя столько-то очков здоровья... ...выводится следующее сообщение:
100 Madrigal is in excellent condition! (Мадригал в отличном состоянии!)
90 - 99 Madrigal has a few scratches. (У Мадригала пара царапин.)
75 - 89 Madrigal has some minor wounds. (Мадригал слегка ранен.)
15 - 74 Madrigal looks pretty hurt. (Мадригал выглядит тяжело раненным.)
0 - 14 Madrigal is in awful condition! (Мадригал в ужасном состоянии!)

    Снова запустите программу. Так как значение healtPoints у Мадригала равно 89, условия в if и в первом операторе else if не являются истинными. Однако условие в

   else if (healthPoints >= 75)
оказывается истинным, поэтому вы увидите в консоли:
  Madrigal has some minor wounds.


Рис.2. Результат работы приложения

    Обратите внимание, что проверка условий if/else выполняется сверху вниз и заканчивается, как только будет найдено первое истинное условие. Если все условия окажутся ложными, выполнится ветвь else.

    Это означает, что порядок условий имеет значение: если бы мы расположили условия if и else if в порядке возрастания, ни одна из ветвей else if не выполнилась бы никогда. Любое значение healthPoints от 15 и выше совпало бы с первым условием, а любое значение меньше 15 вызвало бы выполнение ветви else.


Не меняйте свой код, следующий фрагмент приводится просто для примера.
fun main() {
    val name = "Madrigal"
    var healthPoints = 89

  if (healthPoints >= 15) { 
    // выполнится при любом значении выше 15
    println(name + " looks pretty hurt.")
  } else if (healthPoints >= 75) {
    println(name + " has some minor wounds.")
  } else if (healthPoints >= 90) {
    println(name + " has a few scratches.")
  } else if (healthPoints == 100) {
    println(name + " is in excellent condition!")
  } else { // выполнится при значении 0-14
    println(name + " is in awful condition!")
  }
}

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

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




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