Главная страница
Навигация по странице:

  • Одерски Мартин, Спун Лекс, Веннерс Билл, Соммерс Фрэнк

  • Глава 1.

  • Глава 5.

  • Глава 9.

  • Глава 13.

  • Глава 17.

  • Глава 21.

  • Отзывы на предыдущие издания книги . . . . . . . . . . . . . . . . . . . . . . . . 18

  • Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

  • Scala. Профессиональное программирование 2022. Одерски Мартин, Спун Лекс, Веннерс Билл, Соммерс ФрэнкО41 Scala. Профессиональное программирование. 5е изд спб. Питер, 2022. 608 с. ил. Серия Библиотека программиста


    Скачать 6.24 Mb.
    НазваниеОдерски Мартин, Спун Лекс, Веннерс Билл, Соммерс ФрэнкО41 Scala. Профессиональное программирование. 5е изд спб. Питер, 2022. 608 с. ил. Серия Библиотека программиста
    Дата27.04.2023
    Размер6.24 Mb.
    Формат файлаpdf
    Имя файлаScala. Профессиональное программирование 2022.pdf
    ТипДокументы
    #1094967
    страница1 из 64
      1   2   3   4   5   6   7   8   9   ...   64

    2022
    Scala
    Профессиональное программирование
    Мартин Одерски
    Лекс Спун
    Билл Веннерс
    Фрэнк Соммерс
    5-е издание

    ББК 32.973.2-018.1
    УДК 004.43
    О-41
    Одерски Мартин, Спун Лекс, Веннерс Билл, Соммерс Фрэнк
    О-41 Scala. Профессиональное программирование. 5-е изд.. — СПб.: Питер,
    2022. — 608 с.: ил. — (Серия «Библиотека программиста»).
    ISBN 978-5-4461-1914-1
    «Scala. Профессиональное программирование» — главная книга по Scala, популярному языку для платформы Java, в котором сочетаются концепции объектно-ориентированного и функционального программирования, благодаря чему он превращается в уникальное и мощное средство разработки.
    Этот авторитетный труд, написанный создателями Scala, поможет вам пошагово изучить язык и идеи, лежащие в его основе.
    Пятое издание значительно обновлено, чтобы охватить многочисленные изменения, по- явившиеся в Scala 3.
    16+
    (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)
    ББК 32.973.2-018.1
    УДК 004.43
    Права на издание получены по соглашению с Artima Inc. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения вла- дельцев авторских прав.
    Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, изда- тельство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. Издательство не несет от- ветственности за доступность материалов, ссылки на которые вы можете найти в этой книге. На момент подготовки книги к изданию все ссылки на интернет-ресурсы были действующими.
    ISBN 978-0997148008 англ.
    © 2019 Martin Odersky, Lex Spoon, Bill Venners, Frank Sommers.
    All rights reserved
    ISBN 978-5-4461-1914-1
    © Перевод на русский язык ООО «Прогресс книга», 2022
    © Издание на русском языке, оформление ООО «Прогресс книга»,
    2022
    © Серия «Библиотека программиста», 2022
    © Павлов А., перевод с английского языка, 2022

    Краткое содержание
    Отзывы на предыдущие издания книги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
    Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
    Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
    Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
    Глава 1. Масштабируемый язык . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
    Глава 2. Первые шаги в Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
    Глава 3. Дальнейшие шаги в Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
    Глава 4. Классы и объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
    Глава 5. Основные типы и операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
    Глава 6. Функциональные объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
    Глава 7. Встроенные управляющие конструкции . . . . . . . . . . . . . . . . . . . . 145
    Глава 8. Функции и замыкания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
    Глава 9. Управляющие абстракции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
    Глава 10. Композиция и наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
    Глава 11. Трейты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
    Глава 12. Пакеты, импорты и экспорты . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
    Глава 13. Сопоставление с образцом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
    Глава 14. Работа со списками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
    Глава 15. Работа с другими коллекциями . . . . . . . . . . . . . . . . . . . . . . . . . 331

    6 Краткое содержание
    Глава 16. Изменяемые объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
    Глава 17. Иерархия Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
    Глава 18. Параметризация типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
    Глава 19. Перечисления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
    Глава 20. Абстрактные члены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
    Глава 21. Гивены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
    Глава 22. Методы расширения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
    Глава 23. Классы типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
    Глава 24. Углубленное изучение коллекций . . . . . . . . . . . . . . . . . . . . . . . . 511
    Глава 25. Утверждения и тесты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
    Глоссарий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
    Библиография . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
    Об авторах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607

    Оглавление
    Отзывы на предыдущие издания книги . . . . . . . . . . . . . . . . . . . . . . . . 18
    Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
    Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
    Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
    Целевая аудитория . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
    Как пользоваться книгой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
    Как изучать Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
    Условные обозначения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
    Структура книги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
    Ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
    Исходный код . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
    От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
    Глава 1. Масштабируемый язык . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 1 .1 . Язык, который растет вместе с вами . . . . . . . . . . . . . . . . . . . . . . . . . 38
    Растут новые типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
    Растут новые управляющие конструкции . . . . . . . . . . . . . . . . . . . 41 1 .2 . Почему язык Scala масштабируемый? . . . . . . . . . . . . . . . . . . . . . . . . . 41
    Scala — объектно-ориентированный язык . . . . . . . . . . . . . . . . . . . 42
    Scala — функциональный язык . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 1 .3 . Почему именно Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
    Scala — совместимый язык . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
    Scala — лаконичный язык . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
    Scala — высокоуровневый язык . . . . . . . . . . . . . . . . . . . . . . . . . . 48
    Scala — статически типизированный язык . . . . . . . . . . . . . . . . . . 50 1 .4 . Истоки Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
    Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    8 Оглавление
    Глава 2. Первые шаги в Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
    Шаг 1 . Осваиваем Scala REPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
    Шаг 2 . Объявляем переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
    Шаг 3 . Определяем функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
    Шаг 4 . Пишем Scala-скрипты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
    Шаг 5 . Организуем цикл с while и принимаем решение с if . . . . . . . . . . . . 64
    Шаг 6 . Перебираем элементы с foreach и for-do . . . . . . . . . . . . . . . . . . . . 66
    Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
    Глава 3. Дальнейшие шаги в Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
    Шаг 7 . Параметризуем массивы типами . . . . . . . . . . . . . . . . . . . . . . . . . . 69
    Шаг 8 . Используем списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
    Шаг 9 . Используем кортежи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
    Шаг 10 . Используем множества и отображения . . . . . . . . . . . . . . . . . . . . 79
    Шаг 11 . Учимся распознавать функциональный стиль . . . . . . . . . . . . . . . . 84
    Шаг 12 . Преобразование с отображениями и for-yield . . . . . . . . . . . . . . . . 87
    Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
    Глава 4. Классы и объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4 .1 . Классы, поля и методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4 .2 . Когда подразумевается использование точки с запятой . . . . . . . . . . . 96 4 .3 . Объекты-одиночки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4 .4 . Case-классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4 .5 . Приложение на языке Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
    Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
    Глава 5. Основные типы и операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5 .1 . Некоторые основные типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5 .2 . Литералы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
    Целочисленные литералы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
    Литералы чисел с плавающей точкой . . . . . . . . . . . . . . . . . . . . . 107
    Большие числовые литералы . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
    Символьные литералы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
    Строковые литералы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
    Булевы литералы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 5 .3 . Интерполяция строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 5 .4 . Все операторы являются методами . . . . . . . . . . . . . . . . . . . . . . . . . 112 5 .5 . Арифметические операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 5 .6 . Отношения и логические операции . . . . . . . . . . . . . . . . . . . . . . . . . 116

    Оглавление 9
    5 .7 . Поразрядные операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 5 .8 . Равенство объектов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 5 .9 . Приоритет и ассоциативность операторов . . . . . . . . . . . . . . . . . . . . 120 5 .10 . Обогащающие операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
    Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
    Глава 6. Функциональные объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 6 .1 . Спецификация класса Rational . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 6 .2 . Конструирование класса Rational . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 6 .3 . Переопределение метода toString . . . . . . . . . . . . . . . . . . . . . . . . . . 128 6 .4 . Проверка соблюдения предварительных условий . . . . . . . . . . . . . . . 129 6 .5 . Добавление полей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 6 .6 . Собственные ссылки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 6 .7 . Вспомогательные конструкторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 6 .8 . Приватные поля и методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 6 .9 . Определение операторов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 6 .10 . Идентификаторы в Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 6 .11 . Перегрузка методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 6 .12 . Методы расширения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 6 .13 . Предостережение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
    Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
    Глава 7. Встроенные управляющие конструкции . . . . . . . . . . . . . . . . . . . . 145 7 .1 . Выражения if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 7 .2 . Циклы while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 7 .3 . Выражения for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
    Обход элементов коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
    Фильтрация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
    Вложенные итерации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
    Привязки промежуточных переменных . . . . . . . . . . . . . . . . . . . . 153
    Создание новой коллекции . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 7 .4 . Обработка исключений с помощью выражений try . . . . . . . . . . . . . . 155
    Генерация исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
    Перехват исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
    Условие finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
    Выдача значения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 7 .5 . Выражения match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 7 .6 . Программирование без break и continue . . . . . . . . . . . . . . . . . . . . . . 160

    10 Оглавление
    7 .7 . Область видимости переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 7 .8 . Рефакторинг кода, написанного в императивном стиле . . . . . . . . . . 165 7 .9 . Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
    Глава 8. Функции и замыкания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 8 .1 . Методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 8 .2 . Локальные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 8 .3 . Функции первого класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 8 .4 . Краткие формы функциональных литералов . . . . . . . . . . . . . . . . . . 173 8 .5 . Синтаксис заместителя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 8 .6 . Частично примененные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 8 .7 . Замыкания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 8 .8 . Специальные формы вызова функций . . . . . . . . . . . . . . . . . . . . . . . 180
    Повторяющиеся параметры . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
    Именованные аргументы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
    Значения параметров по умолчанию . . . . . . . . . . . . . . . . . . . . . 182 8 .9 . Тип SAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 8 .10 . Хвостовая рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
    Трассировка функций с хвостовой рекурсией . . . . . . . . . . . . . . . 185
    Ограничения хвостовой рекурсии . . . . . . . . . . . . . . . . . . . . . . . . 187
    Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
    Глава 9. Управляющие абстракции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 9 .1 . Сокращение повторяемости кода . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 9 .2 . Упрощение клиентского кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 9 .3 . Карринг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 9 .4 . Создание новых управляющих конструкций . . . . . . . . . . . . . . . . . . . 196 9 .5 . Передача параметров по имени . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
    Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
    Глава 10. Композиция и наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 10 .1 . Библиотека двумерной разметки . . . . . . . . . . . . . . . . . . . . . . . . . . 203 10 .2 . Абстрактные классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 10 .3 . Определяем методы без параметров . . . . . . . . . . . . . . . . . . . . . . . 205 10 .4 . Расширяем классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 10 .5 . Переопределяем методы и поля . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 10 .6 . Определяем параметрические поля . . . . . . . . . . . . . . . . . . . . . . . . 211 10 .7 . Вызываем конструктор суперкласса . . . . . . . . . . . . . . . . . . . . . . . . 212

    Оглавление 11
    10 .8 . Используем модификатор override . . . . . . . . . . . . . . . . . . . . . . . . . 213 10 .9 . Полиморфизм и динамическое связывание . . . . . . . . . . . . . . . . . . . 215 10 .10 . Объявляем финальные элементы . . . . . . . . . . . . . . . . . . . . . . . . . 217 10 .11 . Используем композицию и наследование . . . . . . . . . . . . . . . . . . . 218 10 .12 . Реализуем методы above, beside и toString . . . . . . . . . . . . . . . . . . 220 10 .13 . Определяем фабричный объект . . . . . . . . . . . . . . . . . . . . . . . . . . 223 10 .14 . Методы heighten и widen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 10 .15 . Собираем все вместе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
    Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
      1   2   3   4   5   6   7   8   9   ...   64


    написать администратору сайта