Шаг 142.
Основы Kotlin.
Объявление классов. Рефакторинг NyetHack (продолжение)

    На этом шаге мы продолжим рефакторинг NyetHack.

    Далее рассмотрим функции, объявленные в Game.kt. Функция printPlayerStatus() выводит текстовый интерфейс игры, поэтому в Game.kt ей самое место. Но auraColor() и formatHeathStatus() связаны с игроком, а не с игровым процессом. А значит, эти две функции должны принадлежать классу, а не функции main().

    Переместите auraColor() и formatHeathStatus() в Player.


Рис.1. Удаляемые функции из main() (Game.kt)

    Снова убедитесь, что объявления функций находятся в теле класса.

class Player {
    var name = "madrigal"
        get() = field.capitalize()
        private set(value) {
            field = value.trim()
        }

    var healthPoints = 89
    val isBlessed = true
    private val isImmortal = false

private fun auraColor(isBlessed: Boolean, healthPoints: Int, 
       isImmortal: Boolean): String {
    val auraVisible = isBlessed && healthPoints > 50 || isImmortal
    val auraColor = if (auraVisible) "GREEN" else "NONE"
    return auraColor
}

private fun formatHealthStatus(healthPoints: Int, isBlessed: Boolean) = 
        when (healthPoints) {
        100 -> "is in excellent condition!"
        in 90..99 -> "has a few scratches."
        in 75..89 -> if (isBlessed) {
            "has some minor wounds but is healing quite quickly!"
        } else {
            "has some minor wounds."
        }
        in 15..74 -> "looks pretty hurt."
        else -> "is in awful condition!"
    }

    fun castFireball(numFireballs: Int = 2) =
            println("A glass of Fireball springs into existence. (x$numFireballs)")
}


Рис.2. Добавление функций класса в Player (Player.kt)

    Мы закончили копировать код, но осталось еще кое-что сделать в Player.kt и Game.kt.

    На следующем шаге мы закончим рефакторинг приложения.




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