Деструктурирующие объявления позволяют распаковать объект в несколько отдельных переменных в одном выражении. Это достигается с помощью функций componentN(), где N соответствует позиции каждого свойства.
Для data classes Kotlin автоматически генерирует component1(), component2() и так далее для каждого свойства, объявленного в первичном конструкторе:
data class User(val name: String, val age: Int)
val user = User("Alice", 25)
val (name, age) = user
println(name) // Alice
println(age) // 25
Под капотом это эквивалентно:
val name = user.component1()
val age = user.component2()
val (name, _) = usercomponentN() можно также определить вручную для не-data классов через ключевое слово operatorДеструктурирование работает в нескольких контекстах:
Pair и Triple из стандартной библиотекиmap.forEach { (key, value) -> ... }operator fun componentN()Поскольку деструктурирование опирается на позицию, переименование свойств в data class не вызовет ошибку компиляции, но может молча присвоить значения не тем переменным — это частый источник багов.
Data classes в Kotlin автоматически генерируют componentN() функции для каждого свойства в primary constructor, где N представляет позицию этого свойства.
Новый — ещё не проверен сообществом
Вы