О чём курс
Язык Scala в последние годы набирает популярность не только в сообществе программистов, но в enterprise-разработке. К его преимуществам относятся использование самых современных нововведений в языки программирования и обширная поддержка функционального подхода к разработке. Это дает возможность повысить эффективность разработки, и создавая очень краткий и эффективный код. Код на Scala компилируется в Java байт-код и выполняется внутри JVM, что обеспечивает отличную совместимость с существующими библиотеками и инструментами Java.
В курсе слушатели получат представление о специфике и особенностях языка Scala, его преимуществах и сложных местах. Курс включает рассмотрение операторов и типов данных Scala, изучение основных структур данных, таких как массивы, map, tuples, использование объектно-ориентированного и функционального программирования, работу с коллекциями Scala, применение pattern matching, case-классов, generic-типов и неявных преобразований. Предлагается большое количество практических упражнений.
Цели
Ознакомить разработчиков с языком программирования Scala
Предварительная подготовка
Необходимо владение современным объектно-ориентированным языком программирования, желательно Java
Для кого
Разработчик
Программа курса
02
Инструкции, операторы и типы
Условные операторы
Циклы
Функции
Переменные
Операторы
Тип Unit
Типы функций
Типы Null, Nothing, Any, AnyRef и AnyVal
Исключения
Создание, добавление и удаление элементов массива
Доступ к элементам массива
Массивы фиксированной и вариативной длины
Многомерные массивы
Операции с массивами
Сортировка массива
Конструирование и доступ в ассоциативным таблицам
Итерирование, изменение, сортировка ассоциативных таблиц
Кортежи
Зиппирование
Классы
Свойства с геттерами и сеттерами
Использование скобок при вызове методов
Свойства только с геттерами
Вспомогательные конструкторы
Основной конструктор
Вложенные классы
Расширение класса
Переопределение методов
Проверка и приведение типа
Вызов конструктора суперкласса
Переопределение полей
Анонимные подклассы
Абстрактные поля
Порядок конструирования и ранние определения
Иерархия наследования
Сравнение объектов на равенство
Синглтоны
Объекты-компаньоны
Объекты, расширяющие класс или трейт
Перечисления
Пакеты-объекты
Методы apply и unapply
Ленивые объекты
Объекты, использующие несколько трейтов
Трейты как интерфейсы
Трейты с конкретной имплементацией
Переопределение абстрактных методов в трейтах
Конкретные и абстрактные поля в трейтах
Порядок конструирования трейта
Инициализация полей трейта
Трейты, расширяющие классы
Self-типы
Функции как переменные
Аргументы по умолчанию и именованные аргументы
Функции без возвращаемого значения
Анонимные функции
Функции с параметрами-функциями
Замыкания
Функциональные интерфейсы
Каррирование
Передача функции как параметра в виде блока кода
Использование return
Трейты коллекций в Скала: Map, Set и Seq
Изменяемые и неизменяемые коллекции
Последовательности
Списки
Изменяемые списки
Множества
Операторы для работы с коллекциями
Стандартные методы работы с коллекциями
Использование функций map, reduce, fold и scan
Зиппирование
Итераторы
Потоки данных
Потокобезопасные коллекции
Параллельные вычисления в коллекциях
Взаимодействие с коллекциями Java
Использование паттерн матчинга
Переменные в паттернах
Паттерны-типы
Сравнение с массивами, списками и кортежами
Регурярные выражения
Экстракторы
Паттерны в определении переменных
Паттерны в выражениях for
10
Case классы, тип Option и partial функции
Сase-классы
Метод copy и именованные параметры
Защищенные классы
Тип Option
Частично определенные функции
Дженерик-классы
Дженерик-функции
Ограничения типов, вариативные типы +T, -T
Использование _ вместо типа
12
Неявные преобразования
Ключевое слово implicit для определения неявного приведения типа
Импортирование и использование неявных преобразований
Неявные параметры