Глубокое изучение неизменяемых коллекций
Изучите основные неизменяемые коллекции, такие как 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 — локальная установка не требуется.
Все уроки этого курса
- Глубокое изучение неизменяемых коллекций
- Функциональные операции над коллекциями
- Option, Try и Either для обработки ошибок