Гранд К., Карпер Б., Эмерик Ч., Программирование в Clojure. Практика применения Lisp в мире Java
серия: Функциональное программирование
ДМК-Пресс, 2013 г., 978-5-94074-925-7
Описание книги
Скачать, но не бесплатно эту книгу можно в интернет-магазинах
Читать онлайн
Доступен для чтения фрагмент книги
Ключевые слова
Поделиться ссылкой на книгу
Содержание книги
Благодарности
Предисловие
Глава 1. Вниз по кроличьей норе
Почему Clojure?
Как получить Clojure
Интерактивная оболочка REPL для Clojure
Вам не придется путаться в частоколе скобок
Выражения, операторы, синтаксис и очередность
Гомоиконность
Механизм чтения
Скалярные литералы
Строки
Логические значения
nil
Знаки (characters)
Ключевые слова (keywords)
Символы (symbols)
Числа
Регулярные выражения
Комментарии
Пробелы и запятые
Литералы коллекций
Прочий синтаксический сахар механизма чтения
Пространства имен
Интерпретация сим волов
Специальные формы
Подавление вычислений: quote
Блоки кода: do
Определение переменных: def
Связывание локальных значений: let
Деструктуризация (let, часть 2)
Деструктуризация упорядоченных коллекций
Деструктуризация ассоциативных массивов
Создание функций: fп
Деструктуризация аргументов функций
Литералы функций
Выполнение по условию: if
Организация циклов: loop и recur
Ссылки на переменные: var
Взаимодействие с Java: . и new
Обработка исключений: try и throw
Специализированная операция set!
Примитивы блокировок: monitor-enter и monitor-exit
Все вместе
eval
Это лишь начало
Часть I. ФУНКЦИОНАЛЬНОЕ И КОНКУРЕНТНОЕ
ПРОГРАММИРОВАНИЕ
Глава 2. Функциональное программирование
Что подразумевается под термином
"Функциональное
программирование"?
О важности значений
О значениях
Сравнение значений изменяемых объектов
Важность выбора
Функции, как сущности первого порядка, и
функции высшего
порядка
Частичное применение
Композиция функций
Создание функций высшего порядка
Создание простейшей системы журнапирования
с применением композиции функций высшего
порядка
Чистые функции
В чем преимущество чистых функций?
Функциональное программирование в реальном
мире
Глава 3. Коллекции и структуры данных
Главенство абстракций над реализациями
Коллекции
Последовательности
Последовательности не являются итераторами
Последовательности не являются списками
Создание последовательностей
Ленивые последовательности
Удержание мусора
Ассоциативные коллекции
Берегитесь значения nil
Индексирование
Стек
Множество
Сортированные коллекции
Определение порядка с помощью компараторов
и предикатов
Упрощенный доступ к коллекциям
Идиоматические приемы использования
Коллекции, ключи и функции высшего порядка
Типы структур данных
Списки
Векторы
Векторы как кортежи
Множества
Ассоциативные массивы
Ассоциативные массивы как специализированные
структуры
Другие применения ассоциативных массивов
Неизменяемость и сохранность
Сохранность и совместное использование
Визуализация сохранности: списки
Визуализация сохранности: ассоциативные
массивы
(векторы и множества)
Очевидные преимущества
Переходные структуры данных
Метаданные
Включаем коллекции Clojure в работу
Идентификаторы и циклы
Думайте иначе: от императивного к
функциональному
Вспоминаем классику: игра "Жизнь"
Генерация лабиринтов
Навигация, изменение и зипперы (zippers)
Манипулирование зипперам и
Собственные зипперы
Зиппер Ариадны
В заключение
Глава 4. Конкуренция и параллелизм
Сдвиг вычислений в пространстве и времени
delay
Механизм future
Механизм promise
Параллельная обработка по невысокой цене
Состояние и идентичность
Ссылочные типы
Классификация параллельных операций
Атомы
Уведомление и ограничение
Функции-наблюдатели
Функции - валидаторы
Ссылки
Программная транзакционная память
Механика изменения ссылок
Функция alter
Уменьшение конфликтов в транзакциях с помощью
commute
Затирание состояния ссылки с помощью ref-set
Проверка локальной согласованности с помощью
валидаторов
Острые углы программной транзакционной памяти
Функции с побочными эффектами строго
запрещены
Минимизируйте продолжительность выполнения
транзакций
Читающие транзакции могут повторяться
Искажение при записи
Переменные
Определение переменных
Приватные переменные
Строки документации
Константы
Динамическая область видимости
Переменные в языке Clojure не являются
переменными
в классическом понимании
Опережающие объявления
Агенты
Обработка ошибок в заданиях агентов
Режимы и обработчики ошибок в агентах
Ввод/вывод, транзакции и вложенная передача
заданий
Сохранение состояний ссылок в журнале на основе
агента
Использование агентов для распределения
нагрузки
Механизмы параллельного выполнения в Java
Блокировки
В заключение
Часть II. СОЗДАНИЕ АБСТРАКЦИИ
Глава 5. Макросы
Что такое макрос?
Чем не являются макросы
Что могут макросы, чего не могут функции?
Сравнение макросов и механизма eval в Ruby
Пишем свой первый макрос
Отладка макросов
Функции развертывания макросов
Синтаксис
Сравнение quote и syntax-quote
unquote и unquote-splicing
Когда следует использовать макросы
Гигиена
Генераторы символов во спасение
Предоставление пользователю права выбора имен
Двукратное вычисление
Распространенные идиомы и шаблоны макросов
Неявные аргументы: &ет/и &form
&env
&f orm
Вывод сообщений об ошибках в макросах
Сохранение определений типов, сделанных
пользователем
Тестирование контекстных макросов
Подробности :->и->>
В заключение
Глава 6. Типы данных и протоколы
Протоколы
Расширение существующих типов
Определение собственных типов
Записи
Конструкторы и фабричные функции
Когда использовать ассоциативные массивы, а
когда записи
Типы
Реализация протоколов
Встроенная реализация
Встроенные реализации интерфейсов Java
Определение анонимных типов с помощью reify
Повторное использование реализаций
Интроспекция протоколов
Пограничные случаи использования протоколов
Поддержка абстракций коллекций
В заключение
Глава 7. Мультиметоды
Основы мультиметодов
Навстречу иерархиям
Иерархии
Независимые иерархи и
Сделаем выбор по-настоящему множественным!
Кое-что еще
Множественное наследование
Интроспекция мультиметодов
type и class; или месть ассоциативного массива
Функции выбора не имеют ограничений
В заключение
Часть III. ИНСТРУМЕНТЫ, ПЛАТФОРМЫ И ПРОЕКТЫ
Глава 8. Создание и организация проектов на
Clojure
География проекта
Определение и использование пространств имен
Пространства имени файлы
Знакомство с classpath
Местоположение, местоположение,
местоположение
Организация программного кода по
функциональным признакам
Основные принципы организации проектов
Сборка
Предварительная компиляция
Управление зависимостями
Модель Maven управления зависимостями
Артефакты и координаты
Репозитории
Зависимости
Инструменты сборки и шаблоны настройки
Maven
Leiningen
Настройка предварительной компиляции
Сборка гибридных проектов
В заключение
Глава 9. Java и взаимодействие с JVM
JVM -основаClojure
Использование классов, методов и полей Java
Удобные утилиты взаимодействий
Исключения и обработка ошибок
Отказ от контролируемых исключений
with-open, прощай finally
Указание типов для производительности
Массивы
Определение классов и реализация интерфейсов
Экземпляры анонимных классов: proxy
Определение именованных классов
gen-class
Аннотации
Создание аннотированных тестов для JUnit
Реализация конечных точек веб-службы JAX-RS
Использование Clojure из Java
Использование классов, созданных с помощью
Deftype и defrecord
Реализация интерфейсов протоколов
Сотрудничество
Глава 10. REPL-ориентированное
программирование
Интерактивная разработка
Постоянное изменяющееся окружение
Инструменты
Оболочка REPL
Интроспекция пространств имен
Eclipse
Emacs
clojure-mode и paredit
inferior-lisp
SLIME
Отладка, мониторинг и исправление программ в
REPL во время
эксплуатации
Особые замечания по поводу "развертываемых"
оболочек REPL
Ограничения при переопределении конструкций
В заключение
Часть IV. ПРАКТИКУМ
Глава 11. Числовые типы и арифметика
Числовые типы в Clojure
В Clojure предпочтение отдается 64-битным (или
больше)
представлениям
Clojure имеет смешанную модель числовых типов
Рациональные числа
Правила определения типа результата
Арифметика в Clojure
Ограниченная и произвольная точность
Неконтролируемые операции
Режимы масштабирования и округления в
операциях
с вещественными числами произвольной точности
Равенство и эквивалентность
Идентичность объектов (identical?)
Равенство ссылок (=)
Числовая эквивалентность(==)
Эквивалентность может защитить ваш рассудок
Оптимизация производительности операций с
числами
0469
Объявление функций, принимающих и
возвращающих
значения простых типов
Ошибки и предупреждения, вызванные
несоответствием
типов
Используйте простые массивы осмысленно
Механика массивов значений простых типов
Автоматизация указания типов в операциях
с многомерными массивами
Визуализация множества Мандельброта в Clojure
Глава 12. Шаблоны проектирования
Внедрение зависимостей
Шаблон Стратегия (Strategy)
Цепочка обязанностей (Chain of Responsibility)
Аспектно-ориентированное программирование
В заключение
Глава 13. Тестирование
Неизменяемые значения и чистые функции
Создание фиктивных значений
clojure. test
Определение тестов
"Комплекты" тестов
Крепления (fixtures)
Расширение HTML DSL
Использование контрольных проверок
Предусловия и постусловия
Глава 14. Реляционные базы данных
clojure. Java, jdbc
Подробнее о with-query-results
Транзакции
Пулы соединений
Korma
Вступление
Запросы
Зачем использовать предметно-ориентированный
язык?
Нibernate
Настройка
Сохранение данных
Выполнение запросов
Избавление от шаблонного кода
В заключение
Глава 15. Нереляционные базы данных
Настройка CouchDB и Clutch
Простейшие CRUD-операции
Представления
Просто в представление (на JavaScript)
Представления на языке Clojure
changes: использование CouchDB в роли очереди
сообщений
Очереди сообщений на заказ
В заключение
Глава 16. Clojure и Веб
"Стек Clojure"
Основа: Ring
Запросы и ответы
Адаптеры
Обработчики
Промежуточные функции
Маршрутизация запросов с помощью Compojure
Обработка шаблонов
Enlive: преобразование HTML с применением
селекторов
Попробуем воду
Селекторы
Итерации и ветвление
Объединяем все вместе
В заключение
Глава 17. Развертывание веб-приложений на
Clojure
Веб-архитектура Java и Clojure
Упаковка веб-приложения
Сборка .war-файлов с помощью Maven
Сборка .war-файлов с помощью Leiningen
Запуск веб-приложений на локальном компьютере
Развертывание веб-приложения
Развертывание приложений на Clojure с помощью
Amazon Elastic Beanstalk
За пределами развертывания простых
веб-приложений
Часть V. РАЗНОЕ
Глава 18. Выбор форм определения типов
Глава 19. Внедрение Clojure
Только факты
Подчеркните особую продуктивность
Подчеркните широту сообщества
Будьте благоразумны
Глава 20. Что дальше?
(dissoc Clojure 'JVM)
ClojureCLR
ClojureScript
4Clojure
Overtone
core, logic
Pallet
Avout
Clojure на платформе Heroku
Об автоpax
Иллюстрация на обложке
Предметный указатель
Об авторе
Отзывы
Последние поступления в рубрике "Тематика определяется"
Математика. Подготовка к ЕГЭ. Задачи с параметрами.10-11 классы
В предлагаемом пособии представлен обширный материал, посвященный двум заключительным и сложным темам ЕГЭ профильного уровня: задачам с параметрами и числам и их свойствам. На многочисленных примерах с подробными решениями и обоснованиями (как и требуется на экзамене) показаны различные методы и решения задач.... | |
План счетов бухгалтерского учета с последними изменениями
Читателю предлагается самая последняя редакция Плана счетов бухгалтерского учета финансово-хозяйственной деятельности организаций и инструкции по его применению с учетом последних приказов Минфина РФ. План счетов - это важнейший инструмент бухгалтерского учета, настольная книга для каждого практического бухгалтера.... | |
На ферме. Книжка с наклейками
Игры с наклейками - занятие не только интересное, но и полезное. С этой книгой малыш познакомится с различными видами транспорта, потренируется решать простые логические задачки и находить соответствия.... |
Если Вы задавались вопросами "где найти книгу в интернете?", "где купить книгу?" и "в каком книжном интернет-магазине нужная книга стоит дешевле?", то наш сайт именно для Вас. На сайте книжной поисковой системы Книгопоиск Вы можете узнать наличие книги Гранд К., Карпер Б., Эмерик Ч., Программирование в Clojure. Практика применения Lisp в мире Java в интернет-магазинах. Также Вы можете перейти на страницу понравившегося интернет-магазина и купить книгу на сайте магазина. Учтите, что стоимость товара и его наличие в нашей поисковой системе и на сайте интернет-магазина книг может отличаться, в виду задержки обновления информации.