Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Лямбда-выражения в Java 8. Функциональное программирование — в массы

Покупка
Артикул: 816358.01.99
Доступ онлайн
319 ₽
В корзину
Если вы имеете опыт работы с Java SE, то из этой книги узнаете об изменениях в версии Java 8, обусловленных появлением в языке лямбда-выражений. Вашему вниманию будут представлены примеры кода, упражнения и увлекательные объяснения того, как можно использовать эти анонимные функции, чтобы сделать код проще и чище, и как библиотеки помогают в решении прикладных задач. Лямбда-выражения — относительно простое изменение в языке Java; в первой части книги показано, как правильно ими пользоваться. В последующих главах демонстрируется, как лямбда-выражения позволяют повысить производительность программы за счет распараллеливания, писать более простой конкурентный код и точнее моделировать предметную область, в том числе создавать более качественные предметно-ориентированные языки. Издание предназначено для программистов разной квалификации, как правило уже работающих с Java, но не имеющих опыта функционального программирования.
Уорбэртон, Р. Лямбда-выражения в Java 8. Функциональное программирование — в массы : практическое руководство / Р. Уорбэртон ; пер. с англ. А. А. Слинкина. - 2-е изд. - Москва : ДМК Пресс, 2023. - 194 с. - (Функциональное программирование). - ISBN 978-5-89818-337-0. - Текст : электронный. - URL: https://znanium.com/catalog/product/2102624 (дата обращения: 28.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Лямбда-выражения в Java 8

Ричард Уорбэртон

Java 8 Lambdas

Functional Programming for the Masses

Richard Warburton

Лямбда-выражения 
в Java 8

Функциональное программирование – 
в массы

Москва, 2023

Ричард Уорбэртон

2-е издание, электронное

УДК 004.432.42Java 8
ББК 32.973.26-018.1
У62

У62
Уорбэртон, Ричард.

Лямбда-выражения в Java 8. Функциональное программирование — 
в массы / Р. Уорбэртон ; пер. с англ. А. А. Слинкина. — 2-е изд., эл. — 1 файл 
pdf : 194 с. — Москва : ДМК Пресс, 2023. — (Функциональное программирование). — Систем. требования: Adobe Reader XI либо Adobe Digital 
Editions 4.5 ; экран 10". — Текст : электронный.

ISBN 978-5-89818-337-0

Если вы имеете опыт работы с Java SE, то из этой книги узнаете об изменениях 
в версии Java 8, обусловленных появлением в языке лямбда-выражений. Вашему 
вниманию будут представлены примеры кода, упражнения и увлекательные объяснения того, как можно использовать эти анонимные функции, чтобы сделать код 
проще и чище, и как библиотеки помогают в решении прикладных задач.
Лямбда-выражения — относительно простое изменение в языке Java; в первой 
части книги показано, как правильно ими пользоваться. В последующих главах 
демонстрируется, как лямбда-выражения позволяют повысить производительность 
программы за счет распараллеливания, писать более простой конкурентный код и 
точнее моделировать предметную область, в том числе создавать более качественные 
предметно-ориентированные языки.
Издание предназначено для программистов разной квалификации, как правило 
уже работающих с Java, но не имеющих опыта функционального программирования.

УДК 004.432.42Java 8 
ББК 32.973.26-018.1

Электронное издание на основе печатного издания: Лямбда-выражения в Java 8. Функциональное программирование — в массы / Р. Уорбэртон ; пер. с англ. А. А. Слинкина. — Москва : 
ДМК Пресс, 2014. — 192 с. — (Функциональное программирование). — ISBN 978-5-94074- 
919-6. — Текст : непосредственный.

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было 
форме и какими бы то ни было средствами без  письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических 
ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность 
приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги.

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами 
защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.

ISBN 978-5-89818-337-0
©  2014 Richard Warburton
© Оформление, перевод, ДМК Пресс, 2014

Содержание

Об авторе ............................................................................................................9

Предисловие..................................................................................................10

Глава 1. Введение ......................................................................................16
Зачем понадобилось снова изменять Java? ................................................16
Что такое функциональное программирование? ....................................18
Пример предметной области ...........................................................................18

Глава 2. Лямбда-выражения ............................................................20
Наше первое лямбда-выражение ...................................................................20
Как опознать лямбда-выражение ..................................................................21
Использование значений .................................................................................23
Функциональные интерфейсы .......................................................................24
Выведение типов .................................................................................................26
Основные моменты ............................................................................................29
Упражнения ..........................................................................................................29

Глава 3. Потоки ............................................................................................31
От внешнего итерирования к внутреннему ...............................................31
Что происходит на самом деле .......................................................................34
Наиболее распространенные потоковые операции ................................36
collect(toList()) .............................................................................................36
map ....................................................................................................................37
filter ...................................................................................................................38
flatMap .............................................................................................................39
max и min ........................................................................................................40
Проявляется общий принцип .................................................................41
reduce ...............................................................................................................43
Объединение операций .............................................................................44
Рефакторинг унаследованного кода .............................................................46
Несколько потоковых вызовов ......................................................................49
Функции высшего порядка .............................................................................50
Полезное применение лямбда-выражений ................................................51
Основные моменты ............................................................................................52

 Содержание

Упражнения ..........................................................................................................53
Упражнения повышенной сложности .........................................................54

Глава 4. Библиотеки ................................................................................55
Использование лямбда-выражений в программе ....................................55
Примитивы ............................................................................................................57
Разрешение перегрузки ....................................................................................59
Аннотация @FunctionalInterface ...................................................................61
Двоичная совместимость интерфейсов .......................................................62
Методы по умолчанию ......................................................................................63
Методы по умолчанию и наследование ...............................................64
Множественное наследование ........................................................................67
Три правила ...................................................................................................68
Компромиссы .......................................................................................................69
Статические методы в интерфейсах .............................................................70
Тип Optional ..........................................................................................................70
Основные моменты ............................................................................................72
Упражнения ..........................................................................................................72
Задача для исследования..................................................................................74

Глава 5. Еще о коллекциях и коллекторах ............................75
Ссылки на методы...............................................................................................75
Упорядочение элементов ..................................................................................76
Знакомство с интерфейсом Collector ...........................................................78
Порождение других коллекций ..............................................................79
Порождение других значений .................................................................80
Разбиение данных .......................................................................................81
Группировка данных ...................................................................................82
Строки .............................................................................................................83
Композиция коллекторов .........................................................................84
Рефакторинг и пользовательские коллекторы .................................86
Редукция как коллектор ...........................................................................94
Усовершенствование интерфейса коллекций ...........................................95
Основные моменты ............................................................................................96
Упражнения ..........................................................................................................97

Глава 6. Параллелизм по данным ................................................98
Параллелизм и конкурентность .....................................................................98
Почему параллелизм важен? ....................................................................... 100
Параллельные потоковые операции.......................................................... 101

Содержание  7

Моделирование ................................................................................................. 102
Подводные камни............................................................................................. 106
Производительность ....................................................................................... 107
Параллельные операции с массивами ...................................................... 110
Основные моменты ......................................................................................... 112
Упражнения ....................................................................................................... 113

Глава 7. Тестирование, отладка и рефакторинг ........... 114
Когда разумно перерабатывать код с использованием 
лямбда-выражений .......................................................................................... 114
Инкапсуляция внутреннего состояния ............................................ 115
Переопределение единственного метода ......................................... 116
Поведенческий паттерн «пиши все дважды».................................. 117
Автономное тестирование лямбда-выражений ..................................... 120
Использование лямбда-выражений в тестовых двойниках .............. 123
Отложенное вычисление и отладка ........................................................... 125
Протоколирование и печать ......................................................................... 125
Решение: метод peek ........................................................................................ 126
Точки останова в середине потока ............................................................. 127
Основные моменты ......................................................................................... 127

Глава 8. Проектирование и архитектурные 
принципы ....................................................................................................... 128
Паттерны проектирования и лямбда-выражения ................................ 129
Паттерн Команда ...................................................................................... 130
Паттерн Стратегия ................................................................................... 133
Паттерн Наблюдатель ............................................................................. 136
Паттерн Шаблонный метод .................................................................. 139
Предметно-ориентированные языки с поддержкой 
лямбда-выражений .......................................................................................... 143
Предметно-ориентированный язык на Java .................................... 144
Как это делается ........................................................................................ 145
Оценка .......................................................................................................... 148
Принципы SOLID и лямбда-выражения................................................. 148
Принцип единственной обязанности ................................................ 149
Принцип открытости-закрытости ...................................................... 152
Принцип инверсии зависимости......................................................... 155
Что еще почитать ............................................................................................. 159
Основные моменты ......................................................................................... 160

 Содержание

Глава 9. Конкурентное программирование 
и лямбда-выражения ........................................................................... 161
Зачем нужен неблокирующий ввод-вывод? ........................................... 161
Обратные вызовы ............................................................................................. 162
Архитектуры на основе передачи сообщений ........................................ 167
Пирамида судьбы ............................................................................................. 168
Будущие результаты ....................................................................................... 171
Завершаемые будущие результаты ............................................................ 173
Реактивное программирование ................................................................... 177
Когда и где .......................................................................................................... 180
Основные моменты ......................................................................................... 181
Упражнения ....................................................................................................... 181

Глава 10. Что дальше? ........................................................................ 183

Алфавитный указатель ...................................................................... 185

Об авторе

Ричард Уорбэртон – технолог-эмпирик, увлекающийся решением 
сложных технических задач, требующих глубокого понимания предмета. Профессионально занимался проблемами статического анализа, верификацией части компилятора и разработкой усовершенствованной автоматизированной технологии обнаружения ошибок. 
Позже заинтересовался методами анализа данных для высокопроизводительных вычислений. Является руководителем лондонского 
сообщества пользователей Java и членом комитета JCP, организует 
процесс подачи запросов на улучшение для Java 8 в части лямбдавыражений и механизмов работы с датой и временем. Ричард также 
часто выступает на конференциях, в том числе JavaOne, DevoxxUK и 
JAX London. Получил степень доктора философии по информатике 
в Варвикском университете, где занимался теоретическими вопросами построения компиляторов.

Предисловие

В течение многих лет функциональное программирование считалось 
уделом небольшой кучки специалистов, неизменно провозглашавших его превосходство, но не способных убедить массы в мудрости 
своего подхода. И эту книгу я написал прежде всего для того, чтобы 
оспорить идею о том, будто функциональному стилю присущи какоето особое превосходство и убежденность в том, что он доступен лишь 
немногим избранным.
Последние два года я убеждал разработчиков, входящих в лондонское сообщество пользователей Java, попробовать те или иные аспекты Java 8. Как оказалось, многим членам нашего сообщества очень 
нравятся предоставленные им новые идиомы и библиотеки. Возможно, их несколько смущают терминология и элитарность технологии, 
но преимущества, которые несет с собой толика несложного функционального программирования, никого не оставляют равнодушными. 
Все согласны, что гораздо проще читать код манипуляции объектами 
и коллекциями, написанный с использованием нового Streams API, – 
например, для выделения музыкальных альбомов, выпущенных в Великобритании, из списка List всех альбомов.
Из опыта проведения таких мероприятий я вынес важный урок – 
все зависит от примеров. Человек учится, решая простые примеры и 
осознавая стоящие за ними закономерности. Я также понял, что терминология легко может оттолкнуть учащегося, поэтому всегда стараюсь объяснять трудные идеи простыми словами.
Для многих механизмы функционального программирования, 
включенные в Java 8, представляются невероятно ограниченными: 
ни тебе монад1, ни отложенных вычислений на уровне языка, ни дополнительной поддержки неизменяемости. С точки зрения программиста-прагматика, это прекрасно; нам нужна возможность выражать 
абстракции на уровне библиотек, чтобы можно быть писать простой и 
чистый код, решающий конкретную задачу. Даже лучше, если кто-то 
уже написал за нас эти библиотеки, чтобы мы могли сосредоточиться 
на своей повседневной работе.

1 Больше это слово в тексте ни разу не встретится.

Доступ онлайн
319 ₽
В корзину