Разбираемые темы:
1. Введение в Scala.
2. Инструкции, операторы и типы:
Условные операторы;
Циклы;
Функции;
Переменные;
Операторы;
Тип Unit;
Типы функций;
Типы Null, Nothing, Any, AnyRef и AnyVal;
Исключения;
3. Arrays, maps, tuples:
Создание, добавление и удаление элементов массива;
Доступ к элементам массива;
Массивы фиксированной и вариативной длины;
Многомерные массивы;
Операции с массивами;
Сортировка массива;
Конструирование и доступ в ассоциативным таблицам;
Итерирование, изменение, сортировка ассоциативных таблиц;
Кортежи;
Зиппирование;
4. Классы и наследование:
Классы;
Свойства с геттерами и сеттерами;
Использование скобок при вызове методов;
Свойства только с геттерами;
Вспомогательные конструкторы;
Основной конструктор;
Вложенные классы;
Расширение класса;
Переопределение методов;
Проверка и приведение типа;
Вызов конструктора суперкласса;
Переопределение полей;
Анонимные подклассы;
Абстрактные поля;
Порядок конструирования и ранние определения;
Иерархия наследования;
Сравнение объектов на равенство;
5. Объекты:
Синглтоны;
Объекты-компаньоны;
Объекты, расширяющие класс или трейт;
Перечисления;
Пакеты-объекты;
Методы apply и unapply;
Ленивые объекты;
Объекты, использующие несколько трейтов;
6. Трейты:
Трейты как интерфейсы;
Трейты с конкретной имплементацией;
Переопределение абстрактных методов в трейтах;
Конкретные и абстрактные поля в трейтах;
Порядок конструирования трейта;
Инициализация полей трейта;
Трейты, расширяющие классы;
Self-типы;
7. Функции:
Функции как переменные;
Аргументы по умолчанию и именованные аргументы;
Функции без возвращаемого значения;
Анонимные функции;
Функции с параметрами-функциями;
Замыкания;
Функциональные интерфейсы;
Каррирование;
Передача функции как параметра в виде блока кода;
Использование return;
8. Коллекции:
Трейты коллекций в Скала: Map, Set и Seq;
Изменяемые и неизменяемые коллекции;
Последовательности;
Списки;
Изменяемые списки;
Множества;
Операторы для работы с коллекциями;
Стандартные методы работы с коллекциями;
Использование функций map, reduce, fold и scan;
Зиппирование;
Итераторы;
Потоки данных;
Потокобезопасные коллекции;
Параллельные вычисления в коллекциях;
Взаимодействие с коллекциями Java;
9. Pattern matching:
Использование паттерн матчинга;
Переменные в паттернах;
Паттерны-типы;
Сравнение с массивами, списками и кортежами;
Регурярные выражения;
Экстракторы;
Паттерны в определении переменных;
Паттерны в выражениях for;
Case классы, тип Option и partial функции;
10. Сase-классы:
Метод copy и именованные параметры;
Защищенные классы;
Тип Option;
Частично определенные функции;
11. Generics:
Дженерик-классы;
Дженерик-функции;
Ограничения типов, вариативные типы +T, -T;
Использование _ вместо типа;
12. Неявные преобразования:
Ключевое слово implicit для определения неявного приведения типа;
Импортирование и использование неявных преобразований;
Неявные параметры.