Деструктуризация data class в Kotlin
Деструктуризация позволяет присвоить поля
data class нескольким переменным сразу.
Слева перечисляют имена в скобках, справа -
объект; порядок совпадает с порядком свойств
в заголовке:
data class User(val name: String, val age: Int)
fun main() {
val user = User("Ann", 25)
val (n, a) = user
println(n)
println(a)
}
Тот же приём работает в цикле for, если
обходят список однотипных записей - на каждой
итерации поля попадают в локальные имена:
data class Point(val x: Int, val y: Int)
fun main() {
val points = listOf(Point(1, 2), Point(3, 4))
for ((x, y) in points) {
println("$x:$y")
}
}
Компилятор генерирует функции component1,
component2 и далее по числу свойств
в заголовке. Явно вызывать их редко нужно -
запись с круглыми скобками читается короче:
data class RGB(val r: Int, val g: Int, val b: Int)
fun main() {
val color = RGB(10, 20, 30)
val (red, green, blue) = color
println(red + green + blue)
}
Сделайте data class Size с полями
width и height.
Дан объект:
val box = Size(800, 600)
Получите width и height
в двух переменных через деструктуризацию
и выведите на экран их произведение.
Сделайте data class Row с полями
key и value.
Дан список:
val rows = listOf(Row("a", 1), Row("b", 2))
Выведите на экран каждый key в
отдельной строке в цикле for с
деструктуризацией.