Шаг 162.
Основы Kotlin.
Инициализация. Задача для самостоятельного решения

    На этом шаге мы рассмотрим одну задачу и прокомментируем ее решение.

    Задание: загадка Экскалибура

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

    У каждого великого меча есть имя. Объявите класс с именем Sword в Kotlin REPL, который подтверждает это.

class Sword(_name: String) { var name = _name
    get() = "The Legendary $field"
    set(value) {
        field = value.toLowerCase().reversed().capitalize()
    }
}


Рис.1. Объявление Sword (REPL)

    Что выведет следующий код, который создает экземпляр Sword и обращается к свойству name? (Попробуйте ответить до того, как проверите в REPL.)

val sword = Sword("Excalibur")
println(sword.name)


Рис.2. Ссылка на name (REPL)

Раскрыть/скрыть решение и комментарии.

    Что выведет следующий код после изменения name?

sword.name = "Gleipnir" 
println(sword.name)

Раскрыть/скрыть решение и комментарии.

    И наконец, добавьте блок инициализации в Sword, который инициализирует name.

class Sword(_name: String) { 
    var name = _name
        get() = "The Legendary $field" 
        set(value) {
        field = value.toLowerCase().reversed().capitalize()
    }
    init {
        name = _name
    }
}


Рис.5. Добавление блока инициализации (REPL)

    Что выведет следующий код теперь, после создания экземпляра Sword и обращения к name?

val sword = Sword("Excalibur") 
println(sword.name)

Раскрыть/скрыть решение и комментарии.

    Это задание проверит ваши знания об инициализации и пользовательских методах чтения и записи свойств.

    Со следующего шага мы начнем знакомиться с наследованием.




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