0Pricing
Kotlin Academy · Урок

Деструктурирующие объявления

Распаковывайте данные в переменные

«Деструктурирующие объявления» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Объявление классов данных
  2. copy и equals
  3. Деструктурирующие объявления
  4. Классы данных в коллекциях
← Назад к Kotlin Academy