Учебник Scala для начинающих
Scala 3 объединяет два мира программирования: строгость объектно-ориентированного подхода и выразительность функционального стиля — всё это на проверенной виртуальной машине Java.
Этот премиум-курс ведёт от первой строчки кода до уверенной работы с паттерн-матчингом, неизменяемыми коллекциями, Option и Either. Каждый урок объясняет, как код работает под капотом JVM, разбирает частые ошибки и даёт лучшие практики. Концепции дополнены запускаемыми примерами на Python и наглядными схемами.
Курс «Scala: ООП и функциональное» состоит из 6 разделов и 22 уроков: Основы: значения, переменные и типы, Функции и методы, Классы, объекты и трейты, Паттерн-матчинг и case-классы, Коллекции и функциональщина и For-выражения, Option и что дальше. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Основы: значения, переменные и типы
- Что такое Scala и зачем она нужна
Scala 3 — гибридный язык на JVM, объединяющий ООП и функциональное программирование. Знакомимся с философией языка.
- val и var: неизменяемость по умолчанию
Разница между val (неизменяемое значение) и var (переменная). Почему Scala поощряет неизменяемость и как это влияет на код.
- Иерархия типов Scala
Система типов Scala: Any в корне, AnyVal для примитивов, AnyRef для объектов, Nothing внизу. Единое дерево без разрыва.
- Что такое Scala и зачем она нужна
2 Функции и методы
- Методы: def, параметры и возврат
Объявление методов через def, типы параметров, выводимый тип возврата и тело-выражение в Scala 3.
- Функции как значения первого класса
Функции-значения в Scala: лямбды, тип Function, сохранение функций в переменные и передача их в другие функции.
- Функции высшего порядка
Функции, которые принимают или возвращают другие функции. Основа функционального стиля Scala — переиспользуемые абстракции поведения.
- Параметры по умолчанию и именованные аргументы
Значения параметров по умолчанию, вызов с именованными аргументами и зачем это упрощает API в Scala 3.
- Рекурсия и хвостовая оптимизация
Рекурсия в Scala, опасность переполнения стека и аннотация @tailrec для гарантированной хвостовой оптимизации.
- Методы: def, параметры и возврат
3 Классы, объекты и трейты
- Классы и конструкторы
Объявление классов в Scala 3, параметры конструктора, поля и методы. Лаконичный синтаксис без шаблонного кода.
- Объекты-одиночки и companion-объекты
Ключевое слово object для одиночек, companion-объекты для классов и фабричный метод apply вместо статических членов.
- Наследование и трейты
Наследование классов через extends, абстрактные методы и трейты — гибкая замена интерфейсов с реализацией.
- Sealed-иерархии и enum
Запечатанные иерархии sealed для исчерпывающих проверок и новый enum в Scala 3 для перечислений и алгебраических типов.
- Классы и конструкторы
4 Паттерн-матчинг и case-классы
- match: сопоставление с образцом
Выражение match в Scala — мощная замена switch: сопоставление по значениям, типам и условиям с возвратом результата.
- case-классы: данные без шаблонного кода
case class в Scala 3: автоматический apply, equals, hashCode, toString, copy и поддержка паттерн-матчинга из коробки.
- Исчерпывающие проверки sealed-типов
Почему sealed-иерархии и enum дают исчерпывающий паттерн-матчинг и как компилятор предупреждает о пропущенных случаях.
- match: сопоставление с образцом
5 Коллекции и функциональщина
- Списки, множества и словари
Базовые неизменяемые коллекции Scala: List, Set, Map. Создание, обращение и почему неизменяемость — по умолчанию.
- map и filter: преобразование данных
Главные функциональные операции коллекций: map преобразует каждый элемент, filter отбирает подходящие. Декларативный стиль.
- fold, reduce и агрегация
Свёртка коллекции в одно значение: foldLeft с начальным значением, reduce, а также sum, count и другие агрегаты.
- Списки, множества и словари
6 For-выражения, Option и что дальше
- for-выражения и yield
for-выражения Scala: генераторы, фильтры и yield для построения коллекций. Сахар над map, flatMap и filter.
- Option: безопасная работа с отсутствием
Тип Option (Some/None) вместо null: безопасное представление отсутствующего значения и методы getOrElse, map, flatMap.
- Try и Either: обработка ошибок
Функциональная обработка ошибок: Try (Success/Failure) для исключений и Either (Left/Right) для двух исходов.
- Экосистема Scala и что дальше
Обзор экосистемы Scala: sbt, ZIO и Cats для функционального программирования, Akka и Spark, и план дальнейшего изучения.
- for-выражения и yield