0Pricing
Kotlin Academy · Урок

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

Разбирайте экземпляры классов данных на переменные с помощью компонентных функций.

«Деструктурирующие объявления с componentN» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Основы деструктуризации

Объявление деструктуризации распаковывает объект в несколько переменных за один шаг. Для этого используются операторные функции componentN().

Деструктуризация класса данных

Классы данных автоматически создают component1, component2 и другие функции, поэтому можно написать val (a, b) = obj.

data class Point(val x: Int, val y: Int)
fun main() {
    val p = Point(3, 5)
    val (x, y) = p
    println("x=$x, y=$y")
}

Деструктуризация пары

Типы стандартной библиотеки Pair и Triple изначально поддерживают деструктуризацию.

fun main() {
    val pair = "Ada" to 35
    val (name, age) = pair
    println("$name is $age")
}

Деструктуризация тройки

Triple хранит три значения; выполните деструктуризацию в три переменные.

fun main() {
    val rgb = Triple(255, 128, 0)
    val (r, g, b) = rgb
    println("R=$r G=$g B=$b")
}

Деструктуризация при переборе отображения

Элементы отображения имеют component1 — ключ и component2 — значение. Выполняйте деструктуризацию в заголовке цикла for.

fun main() {
    val ages = mapOf("Alice" to 30, "Bob" to 25)
    for ((name, age) in ages) {
        println("$name -> $age")
    }
}

Деструктуризация в лямбдах

Лямбды, принимающие пары, могут напрямую деструктурировать параметры.

fun main() {
    val pairs = listOf("a" to 1, "b" to 2, "c" to 3)
    pairs.forEach { (letter, num) -> println("$letter=$num") }
}

Игнорирование значений с помощью _

Используйте подчёркивание _, чтобы пропустить ненужные значения.

data class User(val name: String, val email: String, val age: Int)
fun main() {
    val u = User("Ada", "ada@example.com", 35)
    val (name, _, age) = u
    println("$name ($age)")
}

Возврат нескольких значений

Функция может вернуть Pair или пользовательский класс данных; вызывающий код выполняет деструктуризацию.

data class Result(val sum: Int, val product: Int)
fun computeBoth(a: Int, b: Int) = Result(a + b, a * b)
fun main() {
    val (s, p) = computeBoth(4, 5)
    println("sum=$s product=$p")
}

Пользовательский componentN

Любой класс может поддерживать деструктуризацию, если объявить operator fun componentN().

class RGB(val r: Int, val g: Int, val b: Int) {
    operator fun component1() = r
    operator fun component2() = g
    operator fun component3() = b
}
fun main() {
    val (red, green, blue) = RGB(255, 100, 0)
    println("$red $green $blue")
}

Деструктуризация с withIndex()

Получайте индекс и значение пары при переборе с помощью withIndex().

fun main() {
    val fruits = listOf("apple", "banana", "cherry")
    for ((idx, fruit) in fruits.withIndex()) {
        println("$idx: $fruit")
    }
}

Ограничение: зависимость от позиции

Деструктуризация выполняется по позиции, а не по имени. Изменение порядка полей класса данных незаметно меняет смысл в местах вызова.

data class Point(val x: Int, val y: Int)
fun main() {
    val p = Point(10, 20)
    val (a, b) = p // a=x, b=y
    // Add a property in the middle and old destructuring shifts!
    println("$a $b")
}

Быстрая проверка

Какая операторная функция обеспечивает деструктуризацию i-го свойства?

Повторение

Деструктуризация использует операторные функции componentN(). Классы данных, Pair, Triple и элементы отображений изначально её поддерживают. Используйте _, чтобы пропускать значения, и помните: деструктуризация выполняется по позиции, а не по имени.

Часто задаваемые вопросы

Урок «Деструктурирующие объявления с componentN» бесплатный?

Да — полный текст урока «Деструктурирующие объявления с componentN» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «Деструктурирующие объявления с componentN»?

Разбирайте экземпляры классов данных на переменные с помощью компонентных функций. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Деструктурирующие объявления с componentN»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Основы классов данных: автоматически создаваемые методы
  2. Копирование с помощью copy() и частичные переопределения
  3. Деструктурирующие объявления с componentN
  4. Классы данных в коллекциях и в качестве ключей карт
← Назад к Kotlin Academy