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

Глубокое изучение неизменяемых коллекций

Изучите основные неизменяемые коллекции, такие как List, Map и Set, и научитесь эффективно их использовать.

«Глубокое изучение неизменяемых коллекций» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 3 уроков всего.

Неизменяемые коллекции: обзор

Добро пожаловать в мир неизменяемых коллекций! В Scala они служат основой для написания надёжного, безопасного при параллельном выполнении и предсказуемого кода, особенно в функциональном программировании.

Мы рассмотрим основные типы, такие как List, Map и Set, сосредоточившись на их эффективном и безопасном использовании.

Почему неизменяемость важна

Неизменяемость означает, что после создания коллекцию нельзя изменить. Любая операция, которая выглядит как её «изменение», на самом деле возвращает новую коллекцию.

  • Предсказуемость: код проще понимать.
  • Безопасность потоков: блокировки не нужны, поскольку данные никогда не изменяются.
  • Отсутствие побочных эффектов: операции не изменят неожиданно данные в другом месте.

Списки Scala: упорядоченные последовательности

List в Scala — это неизменяемая упорядоченная последовательность элементов одного типа. Она идеально подходит для последовательных данных, в которых важен порядок.

Создать список можно, просто перечислив его элементы.

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(1, 2, 3, 4, 5)
    val fruits = List("apple", "banana", "cherry")
    println(s"Numbers list: $numbers")
    println(s"Fruits list: $fruits")
  }
}

Операции со списками: начало, хвост и cons

Списки поддерживают распространённые операции, например получение head (первого элемента) и tail (оставшейся части списка). Оператор :: (cons) используется для добавления элемента в начало с созданием нового списка.

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(10, 20, 30)
    println(s"Original list: $numbers")
    println(s"Head of list: ${numbers.head}") // 10
    println(s"Tail of list: ${numbers.tail}") // List(20, 30)
    val newList = 5 :: numbers // Prepend 5
    println(s"List with 5 prepended: $newList")
  }
}

Отображения Scala: связи «ключ — значение»

Map — это неизменяемая коллекция, в которой хранятся пары «ключ — значение». Каждый ключ уникален и соответствует одному значению. Отображения отлично подходят для поиска значений по определённому ключу.

object Main {
  def main(args: Array[String]): Unit = {
    val ages = Map("Alice" -> 30, "Bob" -> 25, "Charlie" -> 35)
    val codes = Map(1 -> "One", 2 -> "Two")
    println(s"Ages map: $ages")
    println(s"Codes map: $codes")
  }
}

Операции с отображениями: доступ и обновление

Получить значение из Map можно с помощью его ключа. Чтобы «обновить» или добавить пару «ключ — значение», нужно создать новое отображение с изменениями, оставив исходное отображение нетронутым.

object Main {
  def main(args: Array[String]): Unit = {
    val ages = Map("Alice" -> 30, "Bob" -> 25)
    println(s"Original ages: $ages")
    println(s"Bob's age: ${ages("Bob")}")
    val updatedAges = ages + ("Charlie" -> 35) // Add new pair
    println(s"Ages after adding Charlie: $updatedAges")
    val changedAges = updatedAges + ("Alice" -> 31) // Update Alice's age
    println(s"Ages after updating Alice: $changedAges")
  }
}

Множества Scala: уникальные элементы

Set — это неизменяемая коллекция уникальных элементов. В отличие от списков, порядок элементов в Set не гарантируется, а повторяющиеся элементы автоматически игнорируются.

Множества идеально подходят для проверки принадлежности или обеспечения уникальности.

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = Set(1, 2, 2, 3, 4, 3, 5)
    val letters = Set('a', 'b', 'a')
    println(s"Unique numbers: $numbers")
    println(s"Unique letters: $letters")
  }
}

Операции с множествами: добавление, удаление, объединение

Как и операции со списками и отображениями, операции добавления и удаления элементов из множеств также возвращают новый Set. Можно выполнять и операции теории множеств, например union (объединение множеств).

object Main {
  def main(args: Array[String]): Unit = {
    val setA = Set(1, 2, 3)
    val setB = Set(3, 4, 5)
    println(s"Set A: $setA")
    println(s"Set B: $setB")
    val addedSet = setA + 4 // Add element
    println(s"Set A + 4: $addedSet")
    val removedSet = setA - 2 // Remove element
    println(s"Set A - 2: $removedSet")
    val unionSet = setA union setB // Combine sets
    println(s"Set A union Set B: $unionSet")
  }
}

Неизменяемость: исходная коллекция сохраняется

Важно помнить: все операции «изменения» неизменяемых коллекций Scala возвращают новую коллекцию. Исходная коллекция никогда не изменяется.

Это поведение — краеугольный камень функционального программирования в Scala.

object Main {
  def main(args: Array[String]): Unit = {
    val originalList = List(10, 20, 30)
    println(s"Original List: $originalList")
    val doubledList = originalList.map(_ * 2) // map returns a NEW list
    println(s"List after map: $doubledList")
    println(s"Original list is still: $originalList") // Unchanged!
  }
}

Проверьте свои знания

Рассмотрите следующий фрагмент кода Scala:

val mySet = Set(1, 2, 3)
val newSet = mySet + 3 + 4
val finalSet = newSet - 2

Каким будет значение mySet после выполнения этих операций?

Повторение: неизменяемые коллекции

Вы подробно изучили основные неизменяемые коллекции Scala:

  • Списки: упорядоченные последовательности, подходящие для последовательных данных.
  • Отображения: пары «ключ — значение», эффективные для поиска.
  • Множества: уникальные элементы, удобные для проверки принадлежности.

Главный вывод — неизменяемость: операции всегда возвращают новые коллекции, обеспечивая предсказуемость и безопасность.

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

Урок «Глубокое изучение неизменяемых коллекций» бесплатный?

Да — полный текст урока «Глубокое изучение неизменяемых коллекций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 3 уроков всего.

Чему я научусь в уроке «Глубокое изучение неизменяемых коллекций»?

Изучите основные неизменяемые коллекции, такие как List, Map и Set, и научитесь эффективно их использовать. Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?

Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.

Сколько времени занимает урок «Глубокое изучение неизменяемых коллекций»?

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

Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?

Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Глубокое изучение неизменяемых коллекций
  2. Функциональные операции над коллекциями
  3. Option, Try и Either для обработки ошибок
← Назад к Scala for Backend Engineering & Functional Programming