Шаг 140.
Основы Kotlin.
Объявление классов. Вычисляемые свойства

    На этом шаге мы рассмотрим особенности задания и использования таких свойств.

    Ранее мы сказали: когда вы объявляете свойство, всегда создается поле, которое хранит фактическое значение. Это, конечно, правда... Кроме случаев так называемых вычисляемых свойств. Вычисляемое свойство - это свойство, для которого переопределяется метод get() и/или set(), не использующий поле. В таких случаях Kotlin не генерирует поле.

    В REPL создайте класс Dice (игральная кость) с вычисляемым свойством rolledValue.

class Dice() {
     val rolledValue
         get() = (1..6).shuffled().first()
 }


Рис.1. Объявление вычисляемого свойства (REPL)

    Произведем бросок.

val myD6 = Dice() 
 myD6.rolledValue
res1: kotlin.Int = 1

myD6.rolledValue
res2: kotlin.Int = 5

myD6.rolledValue
res3: kotlin.Int = 6


Рис.2. Обращение к вычисляемому свойству (REPL)

    При каждом обращении к свойству rolledValue его значение меняется. Это связано с тем, что оно вычисляется всякий раз, когда к нему обращаются. У него нет ни начального значения, ни значения по умолчанию, и у него нет поля, которое могло бы хранить значение.

    Буквально через 2-3 шага, мы более подробно рассмотрим то, как реализованы свойства var и val и какой байт-код производится компилятором, когда вы определяете их.

    Со следующего шага мы займемся рефакторингом NyetHack.




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