0Pricing
Scala for Backend Engineering & Functional Programming · Урок

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

Извлекайте значения обратно.

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

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

  1. Создание кортежей
  2. Деструктуризация кортежей
  3. Создание диапазонов
  4. Диапазоны в циклах
← Назад к Scala for Backend Engineering & Functional Programming