Деструктурирующие объявления
Распаковывайте данные в переменные
«Деструктурирующие объявления» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Распаковка объектов
Иногда требуется одновременно извлечь из объекта несколько свойств.
Деструктурирующие объявления Kotlin позволяют присвоить несколько переменных из одного объекта одной строкой.
Базовая деструктуризация
Поместите имена в круглые скобки слева от =. Kotlin присвоит им компоненты объекта по порядку.
Классы данных поддерживают это автоматически.
data class User(val name: String, val age: Int)
fun main() {
val user = User("Alice", 30)
val (name, age) = user
println(name)
println(age)
}Как это работает
За кулисами деструктуризация вызывает сгенерированные component1(), component2() и так далее.
Позиция каждой переменной соответствует функции компонента с таким же порядковым номером.
data class Point(val x: Int, val y: Int)
fun main() {
val p = Point(3, 7)
println(p.component1())
println(p.component2())
}Порядок имеет значение
Переменные сопоставляются по позиции, а не по имени.
Первая переменная всегда получает первое свойство конструктора — независимо от того, как Вы её назовёте.
data class Pair2(val first: Int, val second: Int)
fun main() {
val (a, b) = Pair2(10, 20)
println(a) // first property
println(b) // second property
}Пропуск компонентов
Используйте символ подчёркивания _, чтобы пропустить ненужный компонент.
Это помогает сохранить код чистым, когда важны только некоторые значения.
data class User(val name: String, val age: Int, val city: String)
fun main() {
val (name, _, city) = User("Mia", 28, "Paris")
println(name)
println(city)
}Деструктуризация в циклах
Деструктуризация особенно полезна при переборе коллекций объектов.
Вы можете распаковать каждый элемент непосредственно в заголовке for.
data class User(val name: String, val age: Int)
fun main() {
val users = listOf(User("A", 20), User("B", 25))
for ((name, age) in users) {
println(name + " is " + age)
}
}Деструктуризация записей отображения
Отображения поддерживают деструктуризацию, поскольку их записи предоставляют компоненты ключа и значения.
Благодаря этому перебор отображения становится очень понятным.
fun main() {
val scores = mapOf("Alice" to 90, "Bob" to 85)
for ((name, score) in scores) {
println(name + ": " + score)
}
}Возврат нескольких значений
Функция может вернуть класс данных, а вызывающий код — деструктурировать результат.
Это удобная альтернатива выходным параметрам.
data class MinMax(val min: Int, val max: Int)
fun minMax(nums: List<Int>): MinMax {
return MinMax(nums.min(), nums.max())
}
fun main() {
val (low, high) = minMax(listOf(3, 1, 8, 5))
println(low)
println(high)
}Деструктуризация Pair и Triple
Стандартная библиотека поддерживает деструктуризацию и для Pair, и для Triple.
Они удобны для быстрого объединения значений без определения класса.
fun main() {
val pair = Pair("x", 1)
val (label, value) = pair
println(label)
println(value)
}Деструктуризация параметров лямбды
Вы можете выполнить деструктуризацию непосредственно в списке параметров лямбды.
Это часто используется при преобразовании записей или пар.
fun main() {
val map = mapOf(1 to "one", 2 to "two")
val text = map.map { (key, value) -> "" + key + "=" + value }
println(text)
}Соберём всё вместе
Деструктуризация распаковывает объекты в переменные:
- Используйте круглые скобки слева от
= - Компоненты сопоставляются по позиции
- Пропускайте компоненты с помощью
_ - Это работает в циклах, лямбдах и возвращаемых значениях
data class Result(val ok: Boolean, val message: String)
fun main() {
val (ok, message) = Result(true, "done")
println(ok)
println(message)
}Быстрая проверка
Проверьте, насколько хорошо Вы поняли объявления с деструктуризацией.
Итоги
Вы изучили объявления с деструктуризацией:
- Они распаковывают объект в несколько переменных
- Сопоставление выполняется по позиции через
componentN() _пропускает ненужные компоненты- Они работают в циклах, отображениях, лямбдах и возвращаемых значениях
Далее Вы будете использовать классы данных внутри коллекций, например множеств и отображений.
Часто задаваемые вопросы
Урок «Деструктурирующие объявления» бесплатный?
Да — полный текст урока «Деструктурирующие объявления» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Деструктурирующие объявления»?
Распаковывайте данные в переменные Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Деструктурирующие объявления»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Объявление классов данных
- copy и equals
- Деструктурирующие объявления
- Классы данных в коллекциях