Информация о книге

978-5-94074-925-7

Главная  » Тематика определяется » Программирование в Clojure. Практика применения Lisp в мире Java

Гранд К., Карпер Б., Эмерик Ч., Программирование в Clojure. Практика применения Lisp в мире Java


серия: Функциональное программирование
ДМК-Пресс, 2013 г., 978-5-94074-925-7


Наличие в интернет-магазинах

Магазинов: 1, Цена: от 1321 руб. посмотреть все

Описание книги

Почему многие выбирают Clojure? Это - функциональный язык программирования, не только позволяющий пользоваться Java-библиотеками, службами и другими ресурсами JVM, но и соперничающий с другими динамическими языками, такими как Ruby и Python. В этом исчерпывающем руководстве вы познакомитесь с основами программирования на Clojure на примерах решения повседневных задач, которые могут быть знакомы вам по другим, известным языкам программирования. Эта книга продемонстрирует вам гибкость Clojure в решении типичных задач, таких как разработка веб-приложений и взаимодействие с базами данных. Вы быстро поймете, что этот язык помогает устранить ненужные сложности из своей практике и открывает новые пути решения сложных проблем, включая многопоточное программирование. ВАШИ ПРЕИМУЩЕСТВА: - используя Clojure, вы не потеряете свои инвестиции в платформу Java; - в лице Clojure вы получите эффективную реализацию Lisp для JVM; - функциональное программирование помогает избавиться от типичных ошибок; - наличие проверенных временем инструментов упрощает создание надежных многопоточных программ; - Clojure избавляет от необходимости применять сложные и пространные шаблоны проектирования; - имеется возможность создавать собственные абстракции с помощью макросов, типов данных, протоколов и мультиметодов; - поддерживается возможность развертывания крупных веб-приложений на сотнях узлов в облачных инфраструктурах.

Купить эту книгу можно в интернет-магазинах

  Лабиринт - 1321 руб.
  Страница товара выбранного интернет-магазина откроется в новом табе

Скачать, но не бесплатно эту книгу можно в интернет-магазинах

  Литрес - 719 руб.

Читать онлайн


Доступен для чтения фрагмент книги

Ключевые слова

Поделиться ссылкой на книгу



Содержание книги

Предисловие к русскому изданию
Благодарности
Предисловие
Глава 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
Иллюстрация на обложке
Предметный указатель


Об авторе


Отзывы

Полезная книга  [ 3 February 2014]
Но встречаются опечатки
Это однозначно must have!  [29 November 2013]
Купил и не пожалел, книга достаточно подробно и обстоятельно описывает язык Clojure и главное объясняется как на нём программировать. Для меня привыкшего к Си подобному синтаксису было тяжеловато перестраиваться, но это стоит того - код как песня льется свободно и непринужденно, не спотыкаясь о костыли как в других языках. Спасибо переводчикам за их труд, ляпов почти нету.
Отличная книга!  [30 June 2013]
По данной книге можно не только освоить язык программирования Clojure, но и начать применять его для реальных проектов (описывается тестирование, параллельное программирование, шаблоны проектирования, взаимодействие с Java-кодом, работа с NoSQL и много другое). То что нужно для профессионального программиста!

Последние поступления в рубрике "Тематика определяется"



Алиса Селезнева. Сто лет тому вперед Алиса Селезнева. Сто лет тому вперед Булычев Б.

Третья планета от солнца готова услышать голоса новых героев! Повесть Кира Булычёва «Сто лет тому вперёд» озвучили актёры Марк Эйдельштейн (он же сыграл Колю Герасимова в экранизации 2024 года) и Дарья Савичева (сериал «Беспринципные»). Шестиклассник Коля вдруг обнаруживает в обычной московской квартире машину времени....

Странная история доктора Джекила и мистера Хайда Странная история доктора Джекила и мистера Хайда Стивенсон Л.У.

Читает Алена Долецкая! Одно из первых произведений в жанре научной фантастики: мрачная готическая повесть о раздвоении личности и тёмной изнанке человеческой души. Генри Джекил, уважаемый в обществе врач и ученый, поставил неудачный эксперимент и материализовал тёмную часть своей личности....

Этика Этика Спиноза С.

Бенедикт Спиноза – основополагающая, веховая фигура в истории мировой философии. Учение Спинозы продолжает начатые Декартом революционные движения мысли в европейской философии, отрицая ценности былых веков, средневековую религиозную догматику и непререкаемость авторитетов....

Если Вы задавались вопросами "где найти книгу в интернете?", "где купить книгу?" и "в каком книжном интернет-магазине нужная книга стоит дешевле?", то наш сайт именно для Вас. На сайте книжной поисковой системы Книгопоиск Вы можете узнать наличие книги Гранд К., Карпер Б., Эмерик Ч., Программирование в Clojure. Практика применения Lisp в мире Java в интернет-магазинах. Также Вы можете перейти на страницу понравившегося интернет-магазина и купить книгу на сайте магазина. Учтите, что стоимость товара и его наличие в нашей поисковой системе и на сайте интернет-магазина книг может отличаться, в виду задержки обновления информации.