Шаг 135.
Основы Kotlin.
Объявление классов. Функции класса

    На этом шаге мы рассмотрим способ задания функций класса.

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

    Вы уже определили некоторые действия игрока в Game.kt. Теперь займемся реорганизацией кода, чтобы внести в него элементы, свойственные классу.

    Начнем с добавления функции castFireball() в Player.

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


Рис.1. Объявление функции класса (Player.kt)


Обратите внимание, что реализация castFireball() не содержит ключевого слова private. Объяснение будет дано дальше.

    Здесь вы объявили тело класса Player, добавив фигурные скобки. Тело класса содержит определения поведения и данных класса по аналогии с тем, как поведение функции определяется в ее теле.

    В Game.kt удалите определение castFireball() и добавьте вызов функции класса в main().

fun main() {
    val name = "Madrigal"
    var healthPoints = 89
    val isBlessed = true
    val isImmortal = false

    val player = Player()
    player.castFireball()

    // Аура
    val auraColor = auraColor(isBlessed, healthPoints, isImmortal)

    val healthStatus = formatHealthStatus(healthPoints, isBlessed)
    // Состояние игрока
    printPlayerStatus(auraColor, isBlessed, name, healthStatus)
}
.   .   .   .
Файл с проектом можно взять здесь.


Рис.2. Вызов функции класса (Game.kt)

    Группировка логики по "объектам" с использованием классов помогает сохранить код организованным в процессе его развития. С ростом NyetHack вы добавите еще больше классов, каждый из которых будет иметь свои обязанности.

    Запустите Game.kt и убедитесь, что игрок получил стакан дурманящего напитка.


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

    Зачем перемещать castFireball() в Player? В NyetHack заклинание для получения дурманящего напитка произносится игроком: этот напиток нельзя получить без экземпляра Player, и бокал с этим напитком создается конкретным игроком, который вызвал castFireball(). Объявление castFireball() как функции класса, которая вызывается для конкретного экземпляра класса, отражает эту логику. Далее мы переместим и другие функции, связанные с игроком в NyetHack, в класс Player.

    На следующем шаге мы рассмотрим доступность и инкапсуляцию.




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