Scala. Профессиональное программирование. 4-е изд. 🔍
Мартин Одерски, Лекс Спун, Билл Веннерс Питер, Библиотека программиста, 4, 2021
英语 [en] · 俄语 [ru] · PDF · 7.4MB · 2021 · 📘 非小说类图书 · 🚀/lgli/lgrs/nexusstc/zlib · Save
描述
«Scala. Профессиональное программирование» — главная книга по Scala, популярному языку для платформы Java, в котором сочетаются концепции объектно-ориентированного и функционального программирования, благодаря чему он превращается в уникальное и мощное средство разработки.
Этот авторитетный труд, написанный создателями Scala, поможет вам пошагово изучить язык и идеи, лежащие в его основе.
Данное четвертое издание полностью обновлено. Добавлен материал об изменениях, появившихся в Scala 2.13, в том числе:
• новая иерархия типов коллекций;
• новые конкретные типы коллекций;
• новые методы, добавленные к коллекциям;
• новые способы определять собственные типы коллекций;
• новые упрощенные представления.
备用文件名
lgrsnf/Scala_Профессиональное_программирование_4_е_изд.pdf
备用文件名
zlib/Computers/Programming/Мартин Одерски, Лекс Спун, Билл Веннерс/Scala. Профессиональное программирование_16280128.pdf
备选标题
Programming in Scala, 4th Edition
备选作者
Martin Odersky; Lex Spoon; Bill Venners; Safari, an O'Reilly Media Company
备选作者
Martin Odersky, Spoon, Lex, Venners, Bill
备选作者
Одерски Мартин; Спун Лекс; Веннерс Билл
备用出版商
Artima, Incorporated
备用出版商
Progress kniga
备用出版商
Artima Press
备用版本
Fourth edition, Walnut Creek, Calif, 2019
备用版本
United States, United States of America
备用版本
4. edition, Walnut Creek, CA, 2019
备用版本
Russia, Russian Federation
备用版本
1st edition, 2019
备用版本
4, 2020
元数据中的注释
Vector PDF
元数据中的注释
lg3026759
元数据中的注释
{"edition":"4","isbns":["098153161X","5446118278","9780981531618","9785446118274"],"last_page":720,"publisher":"Питер","series":"Библиотека программиста"}
备用描述
Предисловие
Благодарности
Введение
Целевая аудитория
Как пользоваться книгой
Как изучать Scala
Условные обозначения
Обзор глав
Ресурсы
Исходный код
От издательства
Глава 1. Масштабируемый язык
1.1. Язык который растет вместе с вами
Растут новые типы
Растут новые управляющие конструкции
1.2. Что делает Scala масштабируемым языком
Scala — объектно-ориентированный язык
Scala — функциональный язык
1.3. Почему именно Scala
Scala — совместимый язык
Scala — лаконичный язык
Scala — язык высокого уровня
Scala — статически типизированный язык
1.4. Истоки Scala
Резюме
Глава 2. Первые шаги в Scala
2.1. Шаг 1. Осваиваем интерпретатор Scala
2.2. Шаг 2. Объявляем переменные
2.3. Шаг 3. Определяем функции
2.4. Шаг 4. Пишем Scala-скрипты
2.5. Шаг 5. Организуем цикл с while и принимаем решение с if
2.6. Шаг 6. Перебираем элементы с foreach и for
Резюме
Глава 3. Дальнейшие шаги в Scala
3.1. Шаг 7. Параметризуем массивы типами
3.2. Шаг 8. Используем списки
3.3. Шаг 9. Используем кортежи
3.4. Шаг 10. Используем множества и отображения
3.5. Шаг 11. Учимся распознавать функциональный стиль
3.6. Шаг 12. Читаем строки из файла
Резюме
Глава 4. Классы и объекты
4.1. Классы поля и методы
4.2. Когда подразумевается использование точки с запятой
4.3. Объекты-одиночки
4.4. Приложение на языке Scala
4.5. Трейт App
Резюме
Глава 5. Основные типы и операции
5.1. Некоторые основные типы
5.2. Литералы
Целочисленные литералы
Литералы чисел с плавающей точкой
Символьные литералы
Строковые литералы
Литералы обозначений
Булевы литералы
5.3. Интерполяция строк
5.4. Все операторы являются методами
5.5. Арифметические операции
5.6. Отношения и логические операции
5.7. Поразрядные операции
5.8. Равенство объектов
5.9. Приоритет и ассоциативность операторов
5.10. Обогащающие оболочки
Резюме
Глава 6. Функциональные объекты
6.1. Спецификация класса Rational
6.2. Конструирование класса Rational
6.3. Переопределение метода toString
6.4. Проверка соблюдения предварительных условий
6.5. Добавление полей
6.6. Собственные ссылки
6.7. Вспомогательные конструкторы
6.8. Приватные поля и методы
6.9. Определение операторов
6.10. Идентификаторы в Scala
6.11. Перегрузка методов
6.12. Неявные преобразования
6.13. Предостережение
Резюме
Глава 7. Встроенные управляющие конструкции
7.1. Выражения if
7.2. Циклы while
7.3. Выражения for
Обход элементов коллекций
Фильтрация
Вложенные итерации
Привязки промежуточных переменных
Создание новой коллекции
7.4. Обработка исключений с помощью выражений try
Генерация исключений
Перехват исключений
Условие finally
Выдача значения
7.5. Выражения match
7.6. Программирование без break и continue
7.7. Область видимости переменных
7.8. Рефакторинг кода написанного в императивном стиле
Резюме
Глава 8. Функции и замыкания
8.1. Методы
8.2. Локальные функции
8.3. Функции первого класса
8.4. Краткие формы функциональных литералов
8.5. Синтаксис заместителя
8.6. Частично примененные функции
8.7. Замыкания
8.8. Специальные формы вызова функций
Повторяющиеся параметры
Именованные аргументы
Значения параметров по умолчанию
8.9. Хвостовая рекурсия
Трассировка функций с хвостовой рекурсией
Ограничения хвостовой рекурсии
Резюме
Глава 9. Управляющие абстракции
9.1. Сокращение повторяемости кода
9.2. Упрощение клиентского кода
9.3. Карринг
9.4. Создание новых управляющих конструкций
9.5. Передача параметров по имени
Резюме
Глава 10. Композиция и наследование
10.1. Библиотека двумерной разметки
10.2. Абстрактные классы
10.3. Определяем методы без параметров
10.4. Расширяем классы
10.5. Переопределяем методы и поля
10.6. Определяем параметрические поля
10.7. Вызываем конструктор суперкласса
10.8. Используем модификатор override
10.9. Полиморфизм и динамическое связывание
10.10. Объявляем финальные элементы
10.11. Используем композицию и наследование
10.12. Реализуем методы above beside и toString
10.13. Определяем фабричный объект
10.14. Методы heighten и widen
10.15. Собираем все воедино
Резюме
Глава 11. Иерархия Scala
11.1. Иерархия классов Scala
11.2. Как реализованы примитивы
11.3. Низшие типы
11.4. Определение собственных классов значений
Уход от монокультурности типов
Резюме
Глава 12. Трейты
12.1. Как работают трейты
12.2. Сравнение «тонких» и «толстых» интерфейсов
12.3. Пример: прямоугольные объекты
12.4. Трейт Ordered
12.5. Трейты как наращиваемые модификации
12.6. Почему не используется множественное наследование
12.7. Так все же с трейтами или без?
Резюме
Глава 13. Пакеты и импорты
13.1. Помещение кода в пакеты
13.2. Краткая форма доступа к родственному коду
13.3. Импортирование кода
13.4. Неявное импортирование
13.5. Модификаторы доступа
Приватные члены
Защищенные члены
Публичные члены
Область защиты
Видимость и объекты-компаньоны
13.6. Объекты пакетов
Резюме
Глава 14. Утверждения и тесты
14.1. Утверждения
14.2. Тестирование в Scala
14.3. Информативные отчеты об ошибках
14.4. Использование тестов в качестве спецификаций
14.5. Тестирование на основе свойств
14.6. Подготовка и проведение тестов
Резюме
Глава 15. Case-классы и сопоставление с образцом
15.1. Простой пример
Case-классы
Сопоставление с образцом
Сравнение match со switch
15.2. Разновидности паттернов
Подстановочные паттерны
Паттерны-константы
Патерны-переменные
Паттерны-конструкторы
Паттерны-последовательности
Паттерны-кортежи
Типизированные паттерны
Привязка переменной
15.3. Ограждение образца
15.4. Наложение паттернов
15.5. Запечатанные классы
15.6. Тип Option
15.7. Паттерны везде
Паттерны в определениях переменных
Последовательности вариантов в качестве частично примененных функций
Паттерны в выражениях for
15.8. Большой пример
Резюме
Глава 16. Работа со списками
16.1. Литералы списков
16.2. Тип List
16.3. Создание списков
16.4. Основные операции над списками
16.5. Паттерны-списки
16.6. Методы первого порядка класса List
Конкатенация двух списков
Принцип «разделяй и властвуй»
Получение длины списка: length
Обращение к концу списка: init и last
Реверсирование списков: reverse
Префиксы и суффиксы: drop take и splitAt
Выбор элемента: apply и indices
Линеаризация списка списков: flatten
Объединение в пары: zip и unzip
Отображение списков: toString и mkString
Преобразование списков: iterator toArray copyToArray
Пример: сортировка слиянием
16.7. Методы высшего порядка класса List
Отображения списков: map flatMap и foreach
Фильтрация списков: filter partition find takeWhile dropWhile и span
Применение предикатов к спискам: forall и exists
Свертка списков: foldLeft и foldRight
Пример: реверсирование списков с помощью свертки
Сортировка списков: sortWith
16.8. Методы объекта List
Создание списков из их элементов: List.apply
Создание диапазона чисел: List.range
Создание единообразных списков: List.fill
Табулирование функции: List.tabulate
Конкатенация нескольких списков: List.concat
16.9. Совместная обработка нескольких списков
16.10. Осмысление имеющегося в Scala алгоритма вывода типов
Резюме
Глава 17. Работа с другими коллекциями
17.1. Последовательности
Списки
Массивы
Буферы списков
Буферы массивов
Строки (реализуемые через StringOps)
17.2. Множества и отображения
Использование множеств
Применение отображений
Множества и отображения используемые по умолчанию
Отсортированные множества и отображения
17.3. Выбор между изменяемыми и неизменяемыми коллекциями
17.4. Инициализация коллекций
Преобразование в массив или список
Преобразования между изменяемыми и неизменяемыми множествами и отображениями
17.5. Кортежи
Резюме
Глава 18. Изменяемые объекты
18.1. Что делает объект изменяемым
18.2. Переназначаемые переменные и свойства
18.3. Практический пример: моделирование дискретных событий
18.4. Язык для цифровых схем
18.5. API моделирования
18.6. Моделирование электронной логической схемы
Класс Wire
Метод inverter
Методы andGate и orGate
Вывод симуляции
Запуск симулятора
Резюме
Глава 19. Параметризация типов
19.1. Функциональные очереди
19.2. Скрытие информации
Приватные конструкторы и фабричные методы
Альтернативный вариант: приватные классы
19.3. Аннотации вариантности
Вариантность и массивы
19.4. Проверка аннотаций вариантности
19.5. Нижние ограничители
19.6. Контравариантность
19.7. Приватные данные объекта
19.8. Верхние ограничители
Резюме
Глава 20. Абстрактные члены
20.1. Краткий обзор абстрактных членов
20.2. Члены-типы
20.3. Абстрактные val-переменные
20.4. Абстрактные var-переменные
20.5. Инициализация абстрактных val-переменных
Предынициализируемые поля
Ленивые val-переменные
20.6. Абстрактные типы
20.7. Типы зависящие от пути
20.8. Уточняющие типы
20.9. Перечисления
20.10. Практический пример: работа с валютой
Резюме
Глава 21. Неявные преобразования и параметры
21.1. Неявные преобразования
21.2. Правила для неявных преобразований
Названия неявных преобразований
Где применяются неявные преобразования
21.3. Неявное преобразование в ожидаемый тип
21.4. Преобразование получателя
Взаимодействие с новыми типами
Имитация нового синтаксиса
Неявные классы
21.5. Неявные параметры
Правило стиля для неявных параметров
21.6. Контекстные ограничители
21.7. Когда применяются множественные преобразования
21.8. Отладка неявных преобразований
Резюме
Глава 22. Реализация списков
22.1. Принципиальный взгляд на класс List
Объект Nil
Класс ::
Еще несколько методов
Создание списка
22.2. Класс ListBuffer
22.3. Класс List на практике
22.4. Внешняя функциональность
Резюме
Глава 23. Возвращение к выражениям for
23.1. Выражения for
23.2. Задача N ферзей
23.3. Выполнение запросов с помощью выражений for
23.4. Трансляция выражений for
Трансляция выражений for с одним генератором
Трансляция выражений for начинающихся с генератора и фильтра
Трансляция выражений for начинающихся с двух генераторов
Трансляция паттернов в генераторах
Трансляция определений
Трансляция применяемая для циклов
23.5. «Мы пойдем другим путем»
23.6. Обобщение for
Резюме
Глава 24. Углубленное изучение коллекций
24.1. Изменяемые и неизменяемые коллекции
24.2. Согласованность коллекций
24.3. Трейт Iterable
Подкатегории Iterable
24.4. Трейты последовательностей Seq IndexedSeq и LinearSeq
Буферы
24.5. Множества
24.6. Отображения
24.7. Конкретные классы неизменяемых коллекций
Списки
Ленивые списки
Неизменяемые ArraySeq
Векторы
Неизменяемые очереди
Диапазоны
Сжатые коллекции HAMT
Красно-черные деревья
Неизменяемые битовые множества
Векторные отображения
Списочные отображения
24.8. Конкретные классы изменяемых коллекций
Буферы массивов
Буферы списков
Построители строк
ArrayDeque
Очереди
Стеки
Изменяемые ArraySeq
Хеш-таблицы
Слабые хеш-отображения
Совместно используемые отображения
Изменяемые битовые множества
24.9. Массивы
24.10. Строки
24.11. Характеристики производительности
24.12. Равенство
24.13. Представления
24.14. Итераторы
Буферизованные итераторы
24.15. Создание коллекций с нуля
24.16. Преобразования между коллекциями Java и Scala
Резюме
Глава 25. Архитектура коллекций Scala
25.1. Исключение общих операций
Абстрагирование типов коллекций
Управление строгостью
Когда строгое вычисление предпочтительно или неизбежно
25.2. Интеграция новых коллекций
Ограниченные последовательности
Последовательности РНК
Префиксные отображения
Краткие выводы
Резюме
Глава 26. Экстракторы
26.1. Пример извлечения адресов электронной почты
26.2. Экстракторы
26.3. Паттерны без переменных или с одной переменной
26.4. Экстракторы переменного количества аргументов
26.5. Экстракторы и паттерны последовательностей
26.6. Сравнение экстракторов и case-классов
26.7. Регулярные выражения
Формирование регулярных выражений
Поиск регулярных выражений
Извлечение с помощью регулярных выражений
Резюме
Глава 27. Аннотации
27.1. Зачем нужны аннотации
27.2. Синтаксис аннотаций
27.3. Стандартные аннотации
Устаревание
Непостоянные поля
Двоичная сериализация
Автоматические методы get и set
Хвостовая рекурсия
Unchecked
Native-методы
Резюме
Глава 28. Работа с XML
28.1. Слабоструктурированные данные
28.2. Краткий обзор XML
28.3. Литералы XML
28.4. Сериализация
28.5. Разбор XML
28.6. Десериализация
28.7. Загрузка и сохранение
28.8. Сопоставление с образцом XML
Резюме
Глава 29. Модульное программирование с использованием объектов
29.1. Суть проблемы
29.2. Приложение для работы с рецептами
29.3. Абстракция
29.4. Разбиение модулей на трейты
29.5. Компоновка во время выполнения
29.6. Отслеживание экземпляров модулей
Резюме
Глава 30. Равенство объектов
30.1. Понятие равенства в Scala
30.2. Написание метода равенства
Ловушка No 1. Определение equals с неверной сигнатурой
Ловушка No 2. Изменение equals без изменения hashCode
Ловушка No 3. Определение equals в терминах изменяемых полей
Ловушка No 4. Ошибка в определении equals как отношения эквивалентности
30.3. Определение равенства для параметризованных типов
30.4. Рецепты для equals и hashCode
Рецепт для equals
Рецепт для hashCode
Резюме
Глава 31. Сочетание кода на Scala и Java
31.1. Использование Scala из Java
Основные правила
Типы значений
Объекты-одиночки
Трейты в качестве интерфейсов
31.2. Аннотации
Дополнительные эффекты от стандартных аннотаций
Сгенерированные исключения
Аннотации Java
Написание собственных аннотаций
31.3. Подстановочные типы
31.4. Совместная компиляция Scala и Java
31.5. Интеграция Java 8
Лямбда-выражения и SAM-типы
Использование Stream-объектов Java 8 из Scala
Резюме
Глава 32. Фьючерсы и многопоточность
32.1. Неприятности в раю
32.2. Асинхронное выполнение и Try
32.3. Работа с фьючерсами
Преобразование фьючерсов с помощью map
Преобразование фьючерсов с помощью выражений for
Создание фьючерса: Future.failed Future.successful Future.fromTry и Promise
Фильтрация: filter и collect
Обработка сбоев: failed fallBackTo recover и recoverWith
Отображение обеих возможностей: transform
Объединение фьючерсов: zip Future.foldLeft Future.reduceLeft Future.sequence и Future.traverse
Получение побочных эффектов: foreach onComplete и andThen
Другие методы добавленные в версии 2.12: flatten zipWith и transformWith
32.4. Тестирование с помощью фьючерсов
Резюме
Глава 33. Синтаксический разбор с помощью комбинаторов
33.1. Пример: арифметические выражения
33.2. Запуск парсера
33.3. Основные парсеры — регулярные выражения
33.4. Еще один пример: JSON
33.5. Вывод парсера
Сравнение символьных и буквенно-цифровых имен
33.6. Реализация комбинаторов парсеров
Входные данные парсера
Результаты парсера
Класс Parser
Псевдонимы this
Парсеры отдельных токенов
Последовательная композиция
Альтернативная композиция
Работа с рекурсией
Преобразование результата
Парсеры не считывающие данных
Option и повторение
33.7. Строковые литералы и регулярные выражения
33.8. Лексинг и парсинг
33.9. Сообщения об ошибках
33.10. Сравнение отката с LL(1)
Резюме
Глава 34. Программирование GUI
34.1. Первое Swing-приложение
34.2. Панели и разметки
34.3. Обработка событий
34.4. Пример: программа перевода градусов между шкалами Цельсия и Фаренгейта
Резюме
Глава 35. Электронная таблица SCells
35.1. Визуальная среда
35.2. Разделение введенных данных и отображения
35.3. Формулы
35.4. Синтаксический разбор формул
35.5. Вычисление
35.6. Библиотеки операций
35.7. Распространение изменений
Резюме
Приложение. Скрипты Scala на Unix и Windows
Глоссарий
Об авторах
备用描述
Programming in Scala Fourth Edition is the definitive book on Scala, the popular language for the Java Platform that blends object-oriented and functional programming concepts into a unique and powerful tool for developers. Coauthored by the designer of the Scala language, this authoritative book will teach you, one step at a time, the Scala language and the ideas behind it. The book is carefully crafted to help you learn. The first few chapters will give you enough of the basics that you can already start using Scala for simple tasks. The entire book is organized so that each new concept builds on concepts that came before-a series of steps that promises to help you master the Scala language and the important ideas about programming that Scala embodies. A comprehensive tutorial and reference for Scala, this book covers the entire language and important libraries
备用描述
Presents an introduction to the new programming language for the Java Platform
开源日期
2021-06-10
更多信息……

🚀 快速下载

成为会员以支持书籍、论文等的长期保存。为了感谢您对我们的支持,您将获得高速下载权益。❤️
如果您在本月捐款,您将获得双倍的快速下载次数。

🐢 低速下载

由可信的合作方提供。 更多信息请参见常见问题解答。 (可能需要验证浏览器——无限次下载!)

所有选项下载的文件都相同,应该可以安全使用。即使这样,从互联网下载文件时始终要小心。例如,确保您的设备更新及时。
  • 对于大文件,我们建议使用下载管理器以防止中断。
    推荐的下载管理器:JDownloader
  • 您将需要一个电子书或 PDF 阅读器来打开文件,具体取决于文件格式。
    推荐的电子书阅读器:Anna的档案在线查看器ReadEraCalibre
  • 使用在线工具进行格式转换。
    推荐的转换工具:CloudConvertPrintFriendly
  • 您可以将 PDF 和 EPUB 文件发送到您的 Kindle 或 Kobo 电子阅读器。
    推荐的工具:亚马逊的“发送到 Kindle”djazz 的“发送到 Kobo/Kindle”
  • 支持作者和图书馆
    ✍️ 如果您喜欢这个并且能够负担得起,请考虑购买原版,或直接支持作者。
    📚 如果您当地的图书馆有这本书,请考虑在那里免费借阅。