Практика делегирования в Kotlin
Объявите interface HasSize с fun size(): Int.
Реализуйте в class ListSize(private val items: List<String>).
Объявите class SizeView(s: HasSize) : HasSize by s.
Выведите размер для списка listOf("a", "b").
Объявите interface Writer с методом
write(text: String). Объявите
class BufferWriter : Writer, накапливающий
строки в MutableList<String>. Объявите
class PrefixWriter(w: Writer) : Writer by w
и переопределите метод write: добавляйте
префикс "> " и вызывайте w.write.
Запишите строку "one" через
PrefixWriter и выведите содержимое буфера.
Объявите class Job. Объявите свойство
val report: String by lazy со строкой
"done". Создайте объект класса и два раза
подряд выведите report.
Объявите class ScoreBoard. Объявите свойство
var points: Int by Delegates.observable(0) { _, _, new ->
if (new >= 10) println("win")
}. Доведите points до 10
двумя присваиваниями.
Объявите class Row(data: Map<String, Any?>).
Объявите поля sku и qty на основе
карты data. Для карты
mapOf("sku" to "x1", "qty" to 3) выведите
количество.
Объявите class NonEmpty с методом
setValue: пустую строку не записывать.
Объявите class Note с полем
var body: String by NonEmpty().
Присвойте "", затем "hi",
выведите body.