Scala для нетерпеливых

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Второе издание было обновлено до поддержки версии Scala 2.12 и демонстрирует самые современные приемы использования языка. В него было добавлено описание последних нововведений в Scala, включая интерполяцию строк, динамический вызов, неявные классы и объекты Future. Язык Scala обладает весьма обширными возможностями, но вы сможете эффективно пользоваться им, даже не зная их все. В этой книге приводится достаточно информации, чтобы вы могли начать работу с простыми и компактными фрагментами кода. Написанная для опытных программистов на Java, C++ и C#, которые желают освоить функциональное программирование или язык Scala, книга в сжатой форме знакомит с основными идеями и приемами программирования, что позволяет быстро осваивать их и применять на практике. Это введение в язык особенно хорошо подходит для нетерпеливых пользователей, желающих изучать основы Scala и тут же воплощать новые знания в код. Автор не стремился охватить все возможности языка и не заставит вас продираться через длинные, надуманные примеры кода. Все примеры были подобраны с особой тщательностью и помогут вам быстро пройти от новичка до эксперта. В книге рассматриваются: описание интерпретатора, синтаксиса, инструментов и уникальных идиом; основные особенности языка: функции, массивы, ассоциативные массивы, кортежи, пакеты, импортирование, обработка исключений и многое другое; объектно-ориентированные особенности Scala: классы, трейты и наследование; приемы использования Scala для решения практических задач, такие как обработка файлов, применение регулярных выражений и работа с XML-документами; функции высшего порядка и обширная библиотека коллекций в Scala; использование мощного механизма сопоставления с шаблонами и применение case-классов; реализация предметно-ориентированных языков; исследование системы типов языка Scala; приемы применения дополнительных мощных инструментов, таких как аннотации, неявные параметры и классы типов.

Author(s): Кей Хостманн
Edition: 2-е издание
Publisher: ДМК Пресс
Year: 2017

Language: Russian
Pages: 414
City: Москва
Tags: scala

Предисловие к первому изданию
Вступление
Об авторе
Глава 1. Основы
1.1. Интерпретатор Scala
1.2. Объявление значений и переменных
1.3. Часто используемые типы
1.4. Арифметика и перегрузка операторов
1.5. Вызов функций и методов
1.6. Метод apply
1.7. Scaladoc
Упражнения
Глава 2. Управляющие структуры и функции
2.1. Условные выражения
2.2. Завершение инструкций
2.3. Блочные выражения и присваивание
2.4. Ввод и вывод
2.5. Циклы
2.6. Расширенные циклы for
2.7. Функции
2.8. Аргументы по умолчанию и именованные аргументы.  L1 
2.9. Переменное количество аргументов.  L1 
2.10. Процедуры
2.11. Ленивые значения.  L1 
2.12. Исключения
Упражнения
Глава 3. Работа с массивами
3.1. Массивы фиксированной длины
3.2. Массивы переменной длины: буферы
3.3. Обход массивов и буферов
3.4. Преобразование массивов
3.5. Типичные алгоритмы
3.6. Расшифровываем Scaladoc
3.7. Многомерные массивы
3.8. Взаимодействие с Java
Упражнения
Глава 4. Ассоциативные массивы и кортежи
4.1. Конструирование ассоциативных массивов
4.2. Доступ к значениям в ассоциативных массивах
4.3. Изменение значений в ассоциативных массивах
4.4. Обход элементов ассоциативных массивов
4.5. Сортированные ассоциативные массивы
4.6. Взаимодействие с Java
4.7. Кортежи
4.8. Функция zip
Упражнения
Глава 5. Ассоциативные массивы и кортежи
5.1. Простые классы и методы без параметров
5.2. Свойства с методами доступа
5.3. Свойства только с методами чтения
5.4. Приватные поля объектов
5.5. Свойства компонентов.  L1 
5.6. Дополнительные конструкторы
5.7. Главный конструктор
5.8. Вложенные классы.  L1 
Упражнения
Глава 6. Объекты
6.1. Объекты-одиночки
6.2. Объекты-компаньоны
6.3. Объекты, расширяющие классы или трейты
6.4. Метод apply
6.5. Объект, представляющий приложение
6.6. Перечисления
Упражнения
Глава 7. Пакеты и импортирование
7.1. Пакеты
7.2. Правила видимости
7.3. Объявления цепочек пакетов
7.4. Объявления в начале файла
7.5. Объекты пакетов
7.6. Видимость внутри пакетов
7.7. Импортирование
7.8. Импортирование возможно в любом месте
7.9. Переименование и сокрытие членов
7.10. Неявный импорт
Упражнения
Глава 8. Наследование
8.1. Наследование классов
8.2. Переопределение методов
8.3. Проверка и приведение типов
8.4. Защищенные поля и методы
8.5. Создание суперклассов
8.6. Переопределение полей
8.7. Анонимные подклассы
8.8. Абстрактные классы
8.9. Абстрактные поля
8.10. Порядок создания и опережающие определения.  L3 
8.11. Иерархия наследования в Scala
8.12. Равенство объектов.  L1 
8.13. Классы-значения.  L2 
Упражнения
Глава 9. Файлы и регулярные выражения
9.1. Чтение строк
9.2. Чтение символов
9.3. Чтение лексем и чисел
9.4. Чтение из URL и других источников
9.5. Чтение двоичных файлов
9.6. Запись в текстовые файлы
9.7. Обход каталогов
9.8. Сериализация
9.9. Управление процессами.  A2 
9.10. Регулярные выражения
9.11. Группы в регулярных выражениях
Упражнения
Глава 10. Трейты
10.1. Почему не поддерживается множественное наследование?
10.2. Трейты как интерфейсы
10.3. Трейты с конкретными реализациями
10.4. Объекты с трейтами
10.5. Многоуровневые трейты
10.6. Переопределение абстрактных методов в трейтах
10.7. Трейты с богатыми интерфейсами
10.8. Конкретные поля в трейтах
10.9. Абстрактные поля в трейтах
10.10. Порядок конструирования трейтов
10.11. Инициализация полей трейтов
10.12. Трейты, наследующие классы
10.13. Собственные типы.  L2 
10.14. За кулисами
Упражнения
Глава 11. Операторы
11.1. Идентификаторы
11.2. Инфиксные операторы
11.3. Унарные операторы
11.4. Операторы присваивания
11.5. Приоритет
11.6. Ассоциативность
11.7. Методы apply и update
11.8. Экстракторы.  L2 
11.9. Экстракторы с одним аргументом или без аргументов.  L2 
11.10. Метод unapplySeq.  L2 
11.11. Динамический вызов.  L2 
Упражнения
Глава 12. Функции высшего порядка
12.1. Функции как значения
12.2. Анонимные функции
12.3. Функции с функциональными параметрами
12.4. Вывод типов
12.5. Полезные функции высшегопорядка
12.6. Замыкания
12.7. Преобразование функций в SAM
12.8. Карринг
12.9. Абстракция управляющих конструкций
12.10. Выражение return
Упражнения
Глава 13. Коллекции
13.1. Основные трейты коллекций
13.2. Изменяемые и неизменяемые коллекции
13.3. Последовательности
13.4. Списки
13.5. Множества
13.7. Операторы добавления и удаления элементов
13.7. Общие методы
13.8. Функции map и flatMap
13.9. Функции reduce, fold и scan.  A3 
13.10. Функция zip
13.11. Итераторы
13.12. Потоки.  A3 
13.13. Ленивые представления.  A3 
13.14. Взаимодействие с коллекциями Java
13.15. Параллельные коллекции
Упражнения
Глава 14. Сопоставление с образцом и case-классы
14.1. Лучше, чем switch
14.2. Ограничители
14.3. Переменные в образцах
14.4. Сопоставление c типами
14.5. Сопоставление с массивами, списками и кортежами
14.6. Экстракторы
14.7. Образцы в объявлениях переменных
14.8. Образцы в выражениях for
14.9. Case-классы
14.10. Метод copy и именованные параметры
14.11. Инфиксная нотация в предложениях case
14.12. Сопоставление с вложенными структурами
14.13. Так ли необходимы case-классы?
14.14. Запечатанные классы
14.15. Имитация перечислений
14.16. Тип Option
14.17. Частично определенные функции.  L2 
Упражнения
Глава 15. Аннотации
15.1. Что такое аннотации?
15.2. Что можно аннотировать?
15.3. Аргументы аннотаций
15.4. Реализация аннотаций
15.5. Аннотации для элементов Java
15.6. Аннотации для оптимизации
15.7. Аннотации ошибок и предупреждений
Упражнения
Глава 16. Обработка XML
16.1. Литералы XML
16.2. Узлы XML
16.3. Атрибуты элементов
16.4. Встроенные выражения
16.5. Выражения в атрибутах
16.6. Необычные типы узлов
16.7. XPath-подобные выражения
16.8. Сопоставление с образцом
16.9. Модификация элементов и атрибутов
16.10. Трансформация XML
16.11. Загрузка и сохранение
16.12. Пространства имен
Упражнения
Глава 17. Объекты Future
17.1. Запуск асинхронных заданий в объектах Future
17.2. Ожидание результатов
17.3. Класс Try
17.4. Обратные вызовы
17.5. Комбинирование заданий в объектах Future
17.6. Другие преобразования объектов Future
17.7. Методы объекта Future
17.8. Объекты Promise
17.9. Контексты выполнения
Упражнения
Глава 18. Параметризованные типы
18.1. Обобщенные классы
18.2. Обобщенные функции
18.3. Границы изменения типов
18.4. Границы представления
18.5. Границы контекста
18.6. Границы контекста ClassTag
18.7. Множественные границы
17.8. Ограничение типов.  L3 
18.9. Вариантность
18.10. Ко- и контравариантные позиции
18.11. Объекты не могут быть обобщенными
18.12. Подстановочный символ
Упражнения
Глава 19. Дополнительные типы
19.1. Типы-одиночки
19.2. Проекции типов
19.3. Цепочки
19.4. Псевдонимы типов
19.5. Структурные типы
19.6. Составные типы
19.7. Инфиксные типы
19.8. Экзистенциальные типы
19.9. Система типов языка Scala
19.10. Собственные типы
19.11. Внедрение зависимостей
19.12. Абстрактные типы.  L3 
19.13. Родовой полиморфизм.  L3 
19.14. Типы высшего порядка.  L3 
Упражнения
Глава 20. Парсинг
20.1. Грамматики
20.2. Комбинирование операций парсера
20.3. Преобразование результатов парсинга
20.4. Отбрасывание лексем
20.5. Создание деревьев синтаксического анализа
20.6. Уход от левой рекурсии
20.7. Дополнительные комбинаторы
20.8. Уход от возвратов
20.9. Packrat-парсеры
20.10. Что такое парсеры?
20.11. Парсеры на основе регулярных выражений
20.12. Парсеры на основе лексем
20.13. Обработка ошибок
Упражнения
Глава 21. Неявные параметры и преобразования
21.1. Неявные преобразования
21.2. Использование неявных преобразований для расширения. существующих библиотек
21.3. Импорт неявных преобразований
21.4. Правила неявных преобразований
21.5. Неявные параметры
21.6. Неявные преобразования с неявными параметрами
21.7. Границы контекста
21.8. Классы типов
21.9. Неявный параметр подтверждения
21.10. Аннотация @implicitNotFound
21.11. Тайна CanBuildFrom
Упражнения
Предметный указатель