Настройка объекта в Kotlin
Функция apply выполняет блок с получателем this
и возвращает сам объект, а не результат последнего
выражения в лямбде. Так удобно заполнить свойства
сразу после создания экземпляра:
class Guest(var name: String = "", var nights: Int = 0)
fun main() {
val guest = Guest().apply {
name = "mia"
nights = 2
}
println(guest.name)
println(guest.nights)
}
Цепочка «конструктор, затем настройка» читается как одно выражение. Снаружи остается переменная того же типа, что и без scope-вызова:
class Guest(var name: String = "", var nights: Int = 0)
fun main() {
val guest = Guest().apply {
nights = 5
}
println(guest.nights)
}
В блоке можно вызывать методы объекта. Возвращаемое
значение apply не зависит от того, что
вернула последняя строка лямбды:
class Guest(var name: String = "", var nights: Int = 0) {
fun reset() {
nights = 0
}
}
fun main() {
val guest = Guest().apply {
name = "leo"
reset()
}
println(guest.name)
println(guest.nights)
}
Сделайте класс Widget с изменяемыми
color и size. Создайте виджет,
задайте "red" и 10 одним
выражением и выведите оба поля.
Класс Route хранит from и to.
Получите настроенный маршрут сразу при создании
и передайте его в функцию, которая печатает оба
города через дефис.