Деструктуризация кортежей
Извлекайте значения обратно.
«Деструктуризация кортежей» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Извлечение значений
Создание кортежа — только половина дела. Чтобы использовать содержащиеся в нём значения, нужно извлечь их.
Scala предлагает два основных способа: доступ по номеру и деструктурирование по шаблону. В этом уроке рассматриваются оба.
Доступ по позиции
У каждого элемента кортежа есть позиция, к которой можно обратиться с помощью ._1, ._2 и так далее.
Обратите внимание: нумерация начинается с единицы, а не с нуля. Поэтому ._1 — это первый элемент.
val person = ("Alice", 30)
println(person._1)
println(person._2)Использование аксессоров в коде
Аксессоры по позиции удобны, когда нужен только один элемент.
Здесь мы читаем возраст из пары и увеличиваем его на единицу. Аксессоры возвращают исходный тип элемента, поэтому арифметика работает напрямую.
val record = ("Bob", 42)
val nextYear = record._2 + 1
println(nextYear)Деструктурирование с помощью val
За выражениями ._1 и ._2 бывает трудно следить. Деструктурирование позволяет сразу присвоить имя каждому элементу.
Этот шаблон val связывает name и age в одной строке.
val (name, age) = ("Cara", 25)
println(name)
println(age)Преимущества деструктурирования
Именованные переменные читаются гораздо лучше, чем позиции, обозначенные числами.
При сравнении age и person._2 вариант с деструктурированием яснее выражает замысел и помогает избежать ошибок на единицу.
val (city, population) = ("Lyon", 500000)
println(s"$city has $population people")Деструктурирование трёх элементов
Деструктурирование работает с кортежами любого размера, а не только с парами.
Здесь кортеж из трёх элементов распаковывается в три именованные переменные одним оператором.
val (id, label, active) = (7, "task", true)
println(id)
println(label)
println(active)Пропуск с помощью подчёркивания
Иногда нужны только некоторые значения. Используйте подчёркивание _, чтобы пропустить позицию.
Здесь мы сохраняем только имя, полностью игнорируя возраст.
val (name, _) = ("Dana", 40)
println(name)Деструктурирование результатов функций
Функции, возвращающие кортежи, естественно сочетаются с деструктурированием.
Вы можете присвоить имена обоим возвращённым значениям прямо при вызове функции, сделав результат понятным без дополнительных пояснений.
def minMax(a: Int, b: Int) = (a min b, a max b)
val (low, high) = minMax(8, 3)
println(low)
println(high)Обмен элементов пары
У кортежа из двух элементов есть встроенный метод swap, меняющий элементы местами.
Он возвращает новую пару с обратным порядком элементов, что иногда бывает удобно.
val pair = ("a", 1)
println(pair.swap)Деструктурирование в for
При переборе коллекции пар можно выполнить деструктурирование в заголовке цикла.
На каждой итерации пара автоматически распаковывается в key и value.
val pairs = List(("a", 1), ("b", 2))
for ((key, value) <- pairs) println(s"$key=$value")Типы сохраняются
Деструктурирование не теряет информацию о типах. Каждая именованная переменная сохраняет точный тип своего элемента.
Так, в val (n, age) = ("Eve", 33) переменная n имеет тип String, а age — тип Int, поэтому их можно безопасно использовать.
val (n, age) = ("Eve", 33)
println(n.length)
println(age * 2)Быстрая проверка
Проверьте, что Вы узнали о деструктурировании кортежей.
Итоги
Значения кортежа можно извлечь с помощью позиционных аксессоров, например ._1 (нумерация с единицы), или более наглядно — с помощью деструктурирования, например val (a, b) = pair.
Подчёркивание пропускает ненужные элементы, деструктурирование работает в циклах for, а типы всегда сохраняются. Далее Вы изучите диапазоны.
Часто задаваемые вопросы
Урок «Деструктуризация кортежей» бесплатный?
Да — полный текст урока «Деструктуризация кортежей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Чему я научусь в уроке «Деструктуризация кортежей»?
Извлекайте значения обратно. Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Деструктуризация кортежей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание кортежей
- Деструктуризация кортежей
- Создание диапазонов
- Диапазоны в циклах