Что выведет код Middle Делегаты обновлено

Свой делегат свойства

Вопрос

Что выведет код? По строке на каждый вывод.

import kotlin.reflect.KProperty

class Logged<T>(private var value: T) {
    operator fun getValue(thisRef: Any?, p: KProperty<*>): T {
        println("get ${p.name}")
        return value
    }
    operator fun setValue(thisRef: Any?, p: KProperty<*>, v: T) {
        println("set ${p.name}=$v")
        value = v
    }
}

class User {
    var age by Logged(30)
}

fun main() {
    val u = User()
    u.age += 1
    println(u.age)
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: get age, set age=31, get age, 31. u.age += 1 раскрывается в чтение и запись: сначала getValue (печатает get age), потом setValue с 31.

Что выведет

get age
set age=31
get age
31

Разбор

u.age += 1 раскрывается в чтение и запись: сначала getValue (печатает get age), потом setValue с 31. Затем println(u.age) снова вызывает getValue, печатает get age, и только потом выводится значение.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.