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

Программирование на Clojure. Практика применения Lisp в мире Java

Покупка
Артикул: 817107.01.99
Доступ онлайн
719 ₽
В корзину
Почему многие выбирают Clojure? Потому что это функциональный язык программирования, не только позволяющий использовать Java-библиотеки, службы и другие ресурсы JVM, но и соперничающий с другими динамическими языками, такими как Ruby и Python. Эта книга продемонстрирует вам гибкость Clojure в решении типичных задач, таких как разработка веб-приложений и взаимодействие с базами данных. Вы быстро поймете, что этот язык помогает устранить ненужные сложности в своей практике и открывает новые пути решения сложных проблем, включая многопоточное программирование. Издание предназначено для программистов, желающих освоить всю мощь и гибкость функционального программирования.
Эмерик, Ч. Программирование на Clojure. Практика применения Lisp в мире Java : практическое руководство / Ч. Эмери, Б. Карпер, К. Гранд ; пер. с англ. А. Н. Киселёва. - 2-е изд. - Москва : ДМК Пресс, 2023. - 817 с. - ISBN 978-5-89818-600-5. - Текст : электронный. - URL: https://znanium.com/catalog/product/2108479 (дата обращения: 22.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Программирование на Clojure

Чаз Эмерик, Брайен Карпер, Кристоф Гранд

Practical Lisp for the Java World

Clojure Programming

Chas Emerick, Brian Carper, Cristophe Grand

Программирование 
на Clojure

Москва, 2023

Чаз Эмерик, Брайен Карпер, Кристоф Гранд

Практика применения Lisp в мире Java

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

УДК 004.432.42Clojure
ББК 32.973-018.1
Э54

Э54
Эмерик, Чаз.
Программирование на Clojure. Практика применения Lisp в мире Java / 
Ч. Эмерик, Б. Карпер, К. Гранд ; пер. с англ. А. Н. Киселёва. — 2-е изд., эл. — 
1 файл pdf : 817 с. — Москва : ДМК Пресс, 2023. — Систем. требования: 
Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный.
ISBN 978-5-89818-600-5

Почему многие выбирают Clojure? Потому что это функциональный язык программирования, не только позволяющий использовать Java-библиотеки, службы и 
другие ресурсы JVM, но и соперничающий с другими динамическими языками, такими как Ruby и Python.
Эта книга продемонстрирует вам гибкость Clojure в решении типичных задач, 
таких как разработка веб-приложений и взаимодействие с базами данных. Вы быстро 
поймете, что этот язык помогает устранить ненужные сложности в своей практике 
и открывает новые пути решения сложных проблем, включая многопоточное программирование.
Издание предназначено для программистов, желающих освоить всю мощь и гибкость функционального программирования.

УДК 004.432.42Clojure 
ББК 32.973-018.1

Электронное издание на основе печатного издания: Программирование на Clojure. Практика 
применения Lisp в мире Java / Ч. Эмерик, Б. Карпер, К. Гранд ; пер. с англ. А. Н. Киселёва. — 
Москва : ДМК Пресс, 2015. — 816 с. — ISBN 978-5-97060-299-7. — Текст : непосредственный.

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

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

ISBN 978-5-89818-600-5
©  Chas Emerick, Brian Carper, and 
Christophe Grand
© Оформление, перевод ДМК Пресс, 2015

Содержание

Предисловие к русскому изданию ........................................... 15

Благодарности .............................................................................. 16

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

Глава 1. Вниз по кроличьей норе .............................................. 26

Почему Clojure? .................................................................................. 26
Как получить Clojure ........................................................................... 29
Интерактивная оболочка REPL для Clojure .......................................... 30
Вам не придется путаться в частоколе скобок .................................... 34
Выражения, операторы, синтаксис и очередность ............................. 35
Гомоиконность ................................................................................... 38
Механизм чтения................................................................................ 41
Скалярные литералы ..................................................................... 43
Строки ..................................................................................... 43
Логические значения ............................................................... 43
nil ............................................................................................. 43
Знаки (characters) .................................................................... 44
Ключевые слова (keywords) ...................................................... 44
Символы (symbols) ................................................................... 46
Числа ....................................................................................... 46
Регулярные выражения ............................................................ 48
Комментарии ................................................................................ 49
Пробелы и запятые ....................................................................... 51
Литералы коллекций ..................................................................... 51
Прочий синтаксический сахар механизма чтения .......................... 52
Пространства имен ............................................................................ 53
Интерпретация символов ................................................................... 56
Специальные формы .......................................................................... 57
Подавление вычислений: quote ..................................................... 59
Блоки кода: do ............................................................................... 60
Определение переменных: def ...................................................... 61

Содержание

Связывание локальных значений: let ............................................. 62
Деструктуризация (let, часть 2) ...................................................... 64
Деструктуризация упорядоченных коллекций .......................... 65
Деструктуризация ассоциативных массивов ............................ 69
Создание функций: fn .................................................................... 74
Деструктуризация аргументов функций ................................... 77
Литералы функций ................................................................... 80
Выполнение по условию: if ............................................................ 82
Организация циклов: loop и recur .................................................. 83
Ссылки на переменные: var ........................................................... 85
Взаимодействие с Java: . и new  .................................................... 86
Обработка исключений: try и throw ................................................ 86
Специализированная операция set! .............................................. 87
Примитивы блокировок: monitor-enter и monitor-exit ..................... 87
Все вместе ......................................................................................... 87
eval ................................................................................................ 88
Это лишь начало ................................................................................. 90

Часть I. ФУНКЦИОНАЛЬНОЕ И КОНКУРЕНТНОЕ 
ПРОГРАММИРОВАНИЕ ................................................................ 91

Глава 2. Функциональное программирование ...................... 92

Что подразумевается под термином «Функциональное 
программирование»? ......................................................................... 93
О важности значений.......................................................................... 94
О значениях .................................................................................. 95
Сравнение значений изменяемых объектов .................................. 96
Важность выбора ........................................................................ 101
Функции, как сущности первого порядка, и функции высшего 
порядка ............................................................................................ 103
Частичное применение  ............................................................... 111
Композиция функций ....................................................................... 116
Создание функций высшего порядка........................................... 120
Создание простейшей системы журналирования 
с применением композиции функций высшего порядка  ............... 121
Чистые функции ............................................................................... 126
В чем преимущество чистых функций? ........................................ 129
Функциональное программирование в реальном мире .................... 132

Глава 3. Коллекции и структуры данных ............................... 134

Главенство абстракций над реализациями ....................................... 135
Коллекции ................................................................................... 139
Последовательности ................................................................... 142

Содержание

Последовательности не являются итераторами ..................... 145
Последовательности не являются списками .......................... 146
Создание последовательностей ............................................. 147
Ленивые последовательности ................................................ 148
Удержание мусора ................................................................. 156
Ассоциативные коллекции .......................................................... 157
Берегитесь значения nil  ......................................................... 161
Индексирование ......................................................................... 162
Стек ............................................................................................ 164
Множество .................................................................................. 165
Сортированные коллекции .......................................................... 166
Определение порядка с помощью компараторов 
и предикатов .......................................................................... 168
Упрощенный доступ к коллекциям .................................................... 173
Идиоматические приемы использования .................................... 175
Коллекции, ключи и функции высшего порядка ........................... 176
Типы структур данных ....................................................................... 177
Списки ........................................................................................ 178
Векторы ...................................................................................... 179
Векторы как кортежи .............................................................. 180
Множества .................................................................................. 181
Ассоциативные массивы ............................................................. 182
Ассоциативные массивы как специализированные 
структуры ............................................................................... 183
Другие применения ассоциативных массивов ........................ 185
Неизменяемость и сохранность ....................................................... 189
Сохранность и совместное использование.................................. 190
Визуализация сохранности: списки ........................................ 191
Визуализация сохранности: ассоциативные массивы 
(векторы и множества) ........................................................... 193
Очевидные преимущества ..................................................... 196
Переходные структуры данных .................................................... 198
Метаданные ..................................................................................... 205
Включаем коллекции Clojure в работу ............................................... 207
Идентификаторы и циклы ............................................................ 208
Думайте иначе: от императивного к функциональному ................ 210
Вспоминаем классику: игра «Жизнь» ...................................... 211
Генерация лабиринтов............................................................ 220
Навигация, изменение и зипперы (zippers) .................................. 228
Манипулирование зипперами ................................................ 229
Собственные зипперы ............................................................ 231
Зиппер Ариадны .................................................................... 232
В заключение ................................................................................... 236

Содержание

Глава 4. Конкуренция и параллелизм ................................... 237

Сдвиг вычислений в пространстве и времени ................................... 238
delay ............................................................................................ 238
Механизм future .......................................................................... 241
Механизм promise ....................................................................... 243
Параллельная обработка по невысокой цене .................................... 246
Состояние и идентичность ............................................................... 250
Ссылочные типы ............................................................................... 253
Классификация параллельных операций .......................................... 255
Атомы............................................................................................... 258
Уведомление и ограничение............................................................. 261
Функции-наблюдатели ................................................................ 261
Функции-валидаторы .................................................................. 264
Ссылки ............................................................................................. 266
Программная транзакционная память ......................................... 266
Механика изменения ссылок ....................................................... 268
Функция alter .......................................................................... 271
Уменьшение конфликтов в транзакциях с помощью commute ... 273
Затирание состояния ссылки с помощью ref-set..................... 279
Проверка локальной согласованности с помощью 
валидаторов ........................................................................... 279
Острые углы программной транзакционной памяти .................... 283
Функции с побочными эффектами строго запрещены .............. 283
Минимизируйте продолжительность выполнения транзакций ..... 284
Читающие транзакции могут повторяться .............................. 287
Искажение при записи ........................................................... 289
Переменные ..................................................................................... 291
Определение переменных ........................................................... 292
Приватные переменные ......................................................... 293
Строки документации ............................................................. 294
Константы .............................................................................. 295
Динамическая область видимости .............................................. 296
Переменные в языке Clojure не являются переменными 
в классическом понимании  ......................................................... 303
Опережающие объявления.......................................................... 305
Агенты .............................................................................................. 307
Обработка ошибок в заданиях агентов ........................................ 310
Режимы и обработчики ошибок в агентах ............................... 312
Ввод/вывод, транзакции и вложенная передача заданий ............... 313
Сохранение состояний ссылок в журнале на основе агента .... 315
Использование агентов для распределения нагрузки ............... 318
Механизмы параллельного выполнения в Java ................................. 328
Блокировки ................................................................................. 329
В заключение ................................................................................... 330

Содержание

Часть II. СОЗДАНИЕ АБСТРАКЦИЙ ......................................... 331

Глава 5. Макросы ........................................................................ 332

Что такое макрос? ............................................................................ 333
Чем не являются макросы ........................................................... 335
Что могут макросы, чего не могут функции? ................................ 336
Сравнение макросов и механизма eval в Ruby ............................. 339
Пишем свой первый макрос ............................................................. 341
Отладка макросов ............................................................................ 343
Функции развертывания макросов .............................................. 344
Синтаксис ........................................................................................ 346
Сравнение quote и syntax-quote................................................... 348
unquote и unquote-splicing ........................................................... 349
Когда следует использовать макросы ............................................... 351
Гигиена ............................................................................................ 353
Генераторы символов во спасение .............................................. 355
Предоставление пользователю права выбора имен .................... 359
Двукратное вычисление .............................................................. 360
Распространенные идиомы и шаблоны макросов ............................. 362
Неявные аргументы: &env и &form .................................................... 364
&env ............................................................................................ 364
&form .......................................................................................... 367
Вывод сообщений об ошибках в макросах.............................. 367
Сохранение определений типов, сделанных пользователем .... 370
Тестирование контекстных макросов .......................................... 373
Подробности: -> и ->> ..................................................................... 375
В заключение ................................................................................... 379

Глава 6. Типы данных и протоколы ........................................ 380

Протоколы........................................................................................ 381
Расширение существующих типов ................................................... 383
Определение собственных типов ..................................................... 389
Записи ........................................................................................ 392
Конструкторы и фабричные функции ...................................... 396
Когда использовать ассоциативные массивы, а когда записи ... 398
Типы ............................................................................................ 399
Реализация протоколов ................................................................... 402
Встроенная реализация .............................................................. 403
Встроенные реализации интерфейсов Java  ........................... 405
Определение анонимных типов с помощью reify ..................... 407
Повторное использование реализаций ....................................... 408
Интроспекция протоколов ................................................................ 413
Пограничные случаи использования протоколов .............................. 415

Содержание

Поддержка абстракций коллекций.................................................... 417
В заключение ................................................................................... 427

Глава 7. Мультиметоды ............................................................. 428

Основы мультиметодов .................................................................... 428
Навстречу иерархиям ....................................................................... 431
Иерархии ......................................................................................... 434

Независимые иерархии ............................................................... 437

Сделаем выбор по-настоящему множественным! ............................ 441
Кое что еще  ..................................................................................... 443

Множественное наследование .................................................... 443
Интроспекция мультиметодов ..................................................... 445
type и class; или месть ассоциативного массива ......................... 446
Функции выбора не имеют ограничений ...................................... 447

В заключение ................................................................................... 449

Часть III. ИНСТРУМЕНТЫ, ПЛАТФОРМЫ И ПРОЕКТЫ ........ 450

Глава 8. Создание и организация проектов на Clojure ...... 451

География проекта ........................................................................... 451

Определение и использование пространств имен ....................... 452

Пространства имен и файлы .................................................. 461
Знакомство с classpath  .......................................................... 465

Местоположение, местоположение, местоположение  ............... 467
Организация программного кода по функциональным признакам ... 469

Основные принципы организации проектов ........................... 471

Сборка ............................................................................................. 472

Предварительная компиляция ..................................................... 473
Управление зависимостями ........................................................ 476
Модель Maven управления зависимостями ................................. 477

Артефакты и координаты........................................................ 477
Репозитории .......................................................................... 479
Зависимости .......................................................................... 480

Инструменты сборки и шаблоны настройки ................................. 483

Maven ..................................................................................... 484
Leiningen ................................................................................ 488
Настройка предварительной компиляции .............................. 491
Сборка гибридных проектов ................................................... 493

В заключение ................................................................................... 496

Глава 9. Java и взаимодействие с JVM .................................. 497

JVM – основа Clojure ......................................................................... 498
Использование классов, методов и полей Java ................................ 499

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