Шаг 150.
Основы Kotlin.
Инициализация. Главный конструктор

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

    Подобно функции, конструктор объявляет ожидаемые параметры, которые должны передаваться как аргументы. Для того чтобы определить, что необходимо экземпляру Player для работы, объявите главный конструктор в заголовке Player. Измените код в Player.kt и добавьте возможность передачи начальных значений для всех свойств Player, используя временные переменные.

class Player (_name: String,
              _healthPoints: Int,
              _isBlessed: Boolean,
              _isImmortal: Boolean) {
    var name = _name
        get() = field.capitalize()
        private set(value) {
            field = value.trim()
        }

    var healthPoints = _healthPoints
    val isBlessed = _isBlessed
    private val isImmortal = _isImmortal
    .   .   .   . 
}


Рис.1. Объявление свойств в первичном конструкторе (Game.kt)


Почему имена переменных начинаются с символа подчеркивания? Временным переменным, в том числе параметрам, которые используются только один раз, часто дают имена, начинающиеся с подчеркивания. Это показывает, что они одноразовые.

    Теперь для того, чтобы создать экземпляр Player, передайте аргументы, соответствующие параметрам, добавленным в конструктор. Благодаря этому, например, можно не ограничивать себя жестко заданным значением для свойства name, а передавать его как аргумент в главный конструктор Player. Измените вызов конструктора Player внутри main(), чтобы выразить это.

fun main() {
    val player = Player("Madrigal", 89, true, false)
    player.castFireball()
    .   .   .   .
}
Файл с проектом можно взять здесь.


Рис.2. Вызов главного конструктора (Game.kt)

    Подумайте над тем, как много возможностей добавил главный конструктор в Player: раньше игрок в NyetHack всегда получал имя Madrigal, не мог стать бессмертным и т. д. Сейчас игрок может выбрать любое имя, а также стать бессмертным, потому что никакие данные в классе Player не задаются жестко.

    Запустите Game.kt, чтобы убедиться, что вывод не изменился.

    На следующем шаге мы рассмотрим объявление свойств в главном конструкторе.




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