Второе издание было обновлено до поддержки версии Scala 2.12 и демонстрирует самые современные приемы использования языка. В него было добавлено описание последних нововведений в Scala, включая интерполяцию строк, динамический вызов, неявные классы и объекты Future. Язык Scala обладает весьма обширными возможностями, но вы сможете эффективно пользоваться им, даже не зная их все. В этой книге приводится достаточно информации, чтобы вы могли начать работу с простыми и компактными фрагментами кода.
Написанная для опытных программистов на Java, C++ и C#, которые желают освоить функциональное программирование или язык Scala, книга в сжатой форме знакомит с основными идеями и приемами программирования, что позволяет быстро осваивать их и применять на практике. Это введение в язык особенно хорошо подходит для нетерпеливых пользователей, желающих изучать основы Scala и тут же воплощать новые знания в код. Автор не стремился охватить все возможности языка и не заставит вас продираться через длинные, надуманные примеры кода. Все примеры были подобраны с особой тщательностью и помогут вам быстро пройти от новичка до эксперта.
Предисловие к первому изданию................................... 15
Вступление........................................................................... 17
Об авторе.............................................................................. 19
Глава 1. Основы................................................................... 20
1.1..Интерпретатор.Scala......................................................... 20
1.2..Объявление.значений.и.переменных................................. 23
1.3..Часто.используемые.типы.................................................. 25
1.4..Арифметика.и.перегрузка.операторов............................... 26
1.5..Вызов.функций.и.методов.................................................. 28
1.6..Метод.apply....................................................................... 29
1.7..Scaladoc............................................................................ 31
Упражнения.............................................................................. 35
Глава 2. Управляющие структуры и функции............... 37
2.1..Условные.выражения......................................................... 38
2.2..Завершение.инструкций.................................................... 40
2.3..Блочные.выражения.и.присваивание................................. 41
2.4..Ввод.и.вывод..................................................................... 42
2.5..Циклы................................................................................ 44
2.6..Расширенные.циклы.for..................................................... 45
2.7..Функции............................................................................ 47
2.8..Аргументы.по.умолчанию.и.именованные.аргументы...L1..... 48
2.9..Переменное.количество.аргументов...L1.............................. 49
2.10..Процедуры....................................................................... 507
Содержание
2.11..Ленивые.значения...L1....................................................... 51
2.12..Исключения..................................................................... 52
Упражнения.............................................................................. 55
Глава 3. Работа с массивами........................................... 57
3.1..Массивы.фиксированной.длины........................................ 58
3.2..Массивы.переменной.длины:.буферы................................ 58
3.3..Обход.массивов.и.буферов................................................ 59
3.4..Преобразование.массивов................................................ 60
3.5..Типичные.алгоритмы......................................................... 62
3.6..Расшифровываем.Scaladoc............................................... 64
3.7..Многомерные.массивы...................................................... 66
3.8..Взаимодействие.с.Java...................................................... 66
Упражнения.............................................................................. 68
Глава 4. Ассоциативные массивы и кортежи............... 70
4.1..Конструирование.ассоциативных.массивов....................... 71
4.2..Доступ.к.значениям.в.ассоциативных.массивах................. 72
4.3..Изменение.значений.в.ассоциативных.массивах............... 72
4.4..Обход.элементов.ассоциативных.массивов....................... 74
4.5..Сортированные.ассоциативные.массивы.......................... 74
4.6..Взаимодействие.с.Java...................................................... 75
4.7..Кортежи............................................................................. 76
4.8..Функция.zip........................................................................ 77
Упражнения.............................................................................. 77
Глава 5. Ассоциативные массивы и кортежи............... 79
5.1..Простые.классы.и.методы.без.параметров........................ 80
5.2..Свойства.с.методами.доступа............................................ 81
5.3..Свойства.только.с.методами.чтения.................................. 83
5.4..Приватные.поля.объектов.................................................. 85
5.5..Свойства.компонентов...L1.................................................. 86
5.6..Дополнительные.конструкторы.......................................... 87
5.7..Главный.конструктор.......................................................... 88
5.8..Вложенные.классы...L1........................................................ 91
Упражнения.............................................................................. 938
Содержание
Глава 6. Объекты................................................................. 96
6.1..Объекты-одиночки............................................................. 96
6.2..Объекты-компаньоны........................................................ 97
6.3..Объекты,.расширяющие.классы.или.трейты...................... 98
6.4..Метод.apply....................................................................... 99
6.5..Объект,.представляющий.приложение..............................100
6.6..Перечисления...................................................................101
Упражнения.............................................................................103
Глава 7. Пакеты и импортирование...............................104
7.1..Пакеты..............................................................................105
7.2..Правила.видимости..........................................................106
7.3..Объявления.цепочек.пакетов............................................108
7.4..Объявления.в.начале.файла..............................................108
7.5..Объекты.пакетов...............................................................109
7.6..Видимость.внутри.пакетов................................................110
7.7..Импортирование..............................................................111
7.8..Импортирование.возможно.в.любом.месте......................112
7.9..Переименование.и.сокрытие.членов.................................112
7.10..Неявный.импорт.............................................................113
Упражнения.............................................................................113
Глава 8. Наследование.....................................................115
8.1..Наследование.классов......................................................115
8.2..Переопределение.методов...............................................116
8.3..Проверка.и.приведение.типов..........................................117
8.4..Защищенные.поля.и.методы.............................................118
8.5..Создание.суперклассов....................................................118
8.6..Переопределение.полей...................................................120
8.7..Анонимные.подклассы......................................................121
8.8..Абстрактные.классы.........................................................122
8.9..Абстрактные.поля.............................................................122
8.10..Порядок.создания.и.опережающие.определения...L3........123
8.11..Иерархия.наследования.в.Scala......................................125
8.12..Равенство.объектов...L1....................................................128
8.13..Классы-значения...L2........................................................129
Упражнения.............................................................................1319
Содержание
Глава 9. Файлы и регулярные выражения....................133
9.1..Чтение.строк.....................................................................134
9.2..Чтение.символов..............................................................134
9.3..Чтение.лексем.и.чисел......................................................135
9.4..Чтение.из.URL.и.других.источников...................................136
9.5..Чтение.двоичных.файлов..................................................136
9.6..Запись.в.текстовые.файлы................................................136
9.7..Обход.каталогов...............................................................137
9.8..Сериализация...................................................................137
9.9..Управление.процессами...А2..............................................138
9.10..Регулярные.выражения...................................................141
9.11..Группы.в.регулярных.выражениях...................................142
Упражнения.............................................................................143
Глава 10. Трейты................................................................145
10.1..Почему.не.поддерживается.множественное..
наследование?........................................................................146
10.2..Трейты.как.интерфейсы..................................................148
10.3..Трейты.с.конкретными.реализациями.............................149
10.4..Объекты.с.трейтами........................................................150
10.5..Многоуровневые.трейты.................................................150
10.6..Переопределение.абстрактных.методов.в.трейтах..........152
10.7..Трейты.с.богатыми.интерфейсами..................................153
10.8..Конкретные.поля.в.трейтах.............................................154
10.9..Абстрактные.поля.в.трейтах............................................155
10.10..Порядок.конструирования.трейтов...............................156
10.11..Инициализация.полей.трейтов......................................158
10.12..Трейты,.наследующие.классы.......................................160
10.13..Собственные.типы...L2....................................................161
10.14..За.кулисами..................................................................162
Упражнения.............................................................................164
Глава 11. Операторы.........................................................167
11.1..Идентификаторы............................................................168
11.2..Инфиксные.операторы....................................................169
11.3..Унарные.операторы........................................................17010
Содержание
11.4..Операторы.присваивания...............................................171
11.5..Приоритет......................................................................171
11.6..Ассоциативность............................................................172
11.7..Методы.apply.и.update....................................................173
11.8..Экстракторы...L2...............................................................174
11.9..Экстракторы.с.одним.аргументом..
или.без.аргументов...L2.............................................................177
11.10..Метод.unapplySeq...L2.....................................................177
11.11..Динамический.вызов...L2................................................178
Упражнения.............................................................................182
Глава 12. Функции высшего порядка............................185
12.1..Функции.как.значения.....................................................186
12.2..Анонимные.функции.......................................................187
12.3..Функции.с.функциональными.параметрами....................188
12.4..Вывод.типов...................................................................189
12.5..Полезные.функции.высшего.порядка..............................190
12.6..Замыкания......................................................................192
12.7..Преобразование.функций.в.SAM.....................................193
12.8..Карринг..........................................................................194
12.9..Абстракция.управляющих.конструкций...........................196
12.10..Выражение.return..........................................................198
Упражнения.............................................................................199
Глава 13. Коллекции.........................................................201
13.1..Основные.трейты.коллекций...........................................202
13.2..Изменяемые.и.неизменяемые.коллекции.......................204
13.3..Последовательности.......................................................205
13.4..Списки............................................................................207
13.5..Множества......................................................................208
13.7..Операторы.добавления.и.удаления.элементов...............210
13.7..Общие.методы................................................................212
13.8..Функции.map.и.flatMap....................................................214
13.9..Функции.reduce,.fold.и.scan...А3........................................216
13.10..Функция.zip...................................................................220
13.11..Итераторы....................................................................22211
Содержание
13.12..Потоки...А3......................................................................223
13.13..Ленивые.представления...А3...........................................225
13.14..Взаимодействие.с.коллекциями.Java............................226
13.15..Параллельные.коллекции..............................................227
Упражнения.............................................................................229
Глава 14. Сопоставление с образцом
и case-классы.....................................................................232
14.1..Лучше,.чем.switch............................................................233
14.2..Ограничители.................................................................234
14.3..Переменные.в.образцах..................................................235
14.4..Сопоставление.c.типами.................................................236
14.5..Сопоставление.с.массивами,.списками.и.кортежами......237
14.6..Экстракторы...................................................................238
14.7..Образцы.в.объявлениях.переменных..............................239
14.8..Образцы.в.выражениях.for..............................................240
14.9..Case-классы...................................................................241
14.10..Метод.copy.и.именованные.параметры.........................242
14.11..Инфиксная.нотация.в.предложениях.case.....................243
14.12..Сопоставление.с.вложенными.структурами..................244
14.13..Так.ли.необходимы.case-классы?..................................245
14.14..Запечатанные.классы...................................................247
14.15..Имитация.перечислений...............................................247
14.16..Тип.Option.....................................................................248
14.17..Частично.определенные.функции...L2.............................249
Упражнения.............................................................................251
Глава 15. Аннотации..........................................................254
15.1..Что.такое.аннотации?......................................................255
15.2..Что.можно.аннотировать?...............................................256
15.3..Аргументы.аннотаций.....................................................257
15.4..Реализация.аннотаций....................................................258
15.5..Аннотации.для.элементов.Java........................................259
15.6..Аннотации.для.оптимизации...........................................262
15.7..Аннотации.ошибок.и.предупреждений............................267
Упражнения.............................................................................26912
Содержание
Глава 16. Обработка XML.................................................271
16.1..Литералы.XML.................................................................272
16.2..Узлы.XML........................................................................273
16.3..Атрибуты.элементов.......................................................274
16.4..Встроенные.выражения..................................................276
16.5..Выражения.в.атрибутах...................................................277
16.6..Необычные.типы.узлов....................................................278
16.7..XPath-подобные.выражения............................................279
16.8..Сопоставление.с.образцом.............................................281
16.9..Модификация.элементов.и.атрибутов.............................282
16.10..Трансформация.XML.....................................................283
16.11..Загрузка.и.сохранение..................................................284
16.12..Пространства.имен.......................................................287
Упражнения.............................................................................288
Глава 17. Объекты Future.................................................290
17.1..Запуск.асинхронных.заданий.в.объектах.Future...............291
17.2..Ожидание.результатов....................................................294
17.3..Класс.Try.........................................................................295
17.4..Обратные.вызовы...........................................................296
17.5..Комбинирование.заданий.в.объектах.Future....................297
17.6..Другие.преобразования.объектов.Future.........................300
17.7..Методы.объекта.Future....................................................302
17.8..Объекты.Promise.............................................................304
17.9..Контексты.выполнения...................................................306
Упражнения.............................................................................307
Глава 18. Параметризованные типы.............................310
18.1..Обобщенные.классы.......................................................311
18.2..Обобщенные.функции.....................................................312
18.3..Границы.изменения.типов...............................................312
18.4..Границы.представления..................................................314
18.5..Границы.контекста..........................................................314
18.6..Границы.контекста.ClassTag............................................315
18.7..Множественные.границы................................................316
17.8..Ограничение.типов...L3.....................................................31613
Содержание
18.9..Вариантность..................................................................318
18.10..Ко-.и.контравариантные.позиции..................................320
18.11..Объекты.не.могут.быть.обобщенными...........................322
18.12..Подстановочный.символ...............................................323
Упражнения.............................................................................324
Глава 19. Дополнительные типы....................................326
19.1..Типы-одиночки...............................................................327
19.2..Проекции.типов..............................................................329
19.3..Цепочки..........................................................................330
19.4..Псевдонимы.типов..........................................................331
19.5..Структурные.типы...........................................................332
19.6..Составные.типы..............................................................332
19.7..Инфиксные.типы.............................................................334
19.8..Экзистенциальные.типы.................................................334
19.9..Система.типов.языка.Scala.............................................336
19.10..Собственные.типы........................................................337
19.11..Внедрение.зависимостей.............................................338
19.12..Абстрактные.типы...L3.....................................................341
19.13..Родовой.полиморфизм...L3.............................................343
19.14..Типы.высшего.порядка...L3..............................................346
Упражнения.............................................................................350
Глава 20. Парсинг..............................................................353
20.1..Грамматики....................................................................354
20.2..Комбинирование.операций.парсера...............................356
20.3..Преобразование.результатов.парсинга...........................358
20.4..Отбрасывание.лексем.....................................................360
20.5..Создание.деревьев.синтаксического.анализа.................361
20.6..Уход.от.левой.рекурсии...................................................361
20.7..Дополнительные.комбинаторы.......................................363
20.8..Уход.от.возвратов...........................................................366
20.9..Packrat-парсеры.............................................................367
20.10..Что.такое.парсеры?.......................................................368
20.11..Парсеры.на.основе.регулярных.выражений...................369
20.12..Парсеры.на.основе.лексем............................................37014
Содержание
20.13..Обработка.ошибок........................................................372
Упражнения.............................................................................374
Глава 21. Неявные параметры и преобразования.....376
21.1..Неявные.преобразования...............................................377
21.2..Использование.неявных.преобразований..
для.расширения..существующих.библиотек............................378
21.3..Импорт.неявных.преобразований...................................379
21.4..Правила.неявных.преобразований..................................381
21.5..Неявные.параметры........................................................382
21.6..Неявные.преобразования.с.неявными.параметрами.......383
21.7..Границы.контекста..........................................................385
21.8..Классы.типов..................................................................386
21.9..Неявный.параметр.подтверждения.................................389
21.10..Аннотация
[email protected]21.11..Тайна.CanBuildFrom.......................................................391
Упражнения.............................................................................393
Предметный указатель.....................................................395
Хорстман К.