На этом шаге мы рассмотрим особенности использования вложенных операторов.
В NyetHack игрок может быть "благословлен", и это будет означать, что при хорошем здоровье легкие раны заживут быстрее. Следующий шаг - добавить переменную для хранения признака благословения игрока (как вы думаете, какой тип данных подойдет?) и изменить вывод состояния, чтобы отразить это.
Для этого можно вложить еще один оператор if/else в одну из существующих ветвей, например, соответствующую уровню здоровья большего или равного 75.
fun main() { val name = "Madrigal" var healthPoints = 89 val isBlessed = true if (healthPoints == 100) { println(name + " is in excellent condition!") } else if (healthPoints >= 90) { println(name + " has a few scratches.") } else if (healthPoints >= 75) { if (isBlessed) { println(name + " has some minor wounds but is healing quite quickly!") } else { 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)
Было добавлено булево значение val, представляющее наличие у игрока благословения. Также был добавлен оператор if/else, чтобы вывести дополнительное сообщение, когда у игрока от 75 до 89 единиц здоровья и есть благословение. Если предположить, что healthPoints имеет значение 89, вы ожидаемо увидите новое сообщение после запуска программы. Запустите ее и проверьте. Вывод должен быть такой:
Madrigal has some minor wounds but is healing quite quickly!
Рис.2. Результат работы приложения
Если вы получили другой вывод, проверьте, совпадает ли код с приведенным выше, в частности, имеет ли healthPoints значение 89.
Вложенные операторы позволяют добавлять дополнительные ветви внутрь ветвей, что помогает выражать более точные и сложные условия.
На следующем шаге мы рассмотрим условные операторы.