Примечание переводчика
Предисловие
Введение
- Сравнение функционального и процедурного подходов
- Объектно-ориентированный код
- Функциональный стиль? Функциональный язык?
- Что ожидать от книги
- Первая часть
Чистые функции
- Определяем “чистоту” функции
- Композиция функций
- Бинарные функции
Функции первого класса
- Анонимные функции
- Объекты-замыкания
- Короткие лямбды
- Привязка объекта
Мемоизация
Каррирование
Преобразование
Фильтрация
Свёртка
Конкатенация
Рекурсия
- Рекурсия
Иммутабельные объекты-значения
- Текущее поведение PHP
- Привносим иммутабельность
- Объекты по-функциональному
- Эволюционирующие объекты
- Зависимости
- Объекты-сущности
- Внутрифункциональная иммутабельность
- Часть вторая
Теория категорий
- Что такое категория?
- Объекты
- Несколько новых определений
- Структура
- Разбираемся с функторами
- Изоморфизм
- Моноиды
Категории на практике
- Преобразование структуры
- Функциональные объекты
Развлекаемся с функторами
- Объединение функторов
- Монады в программировании
- Анатомия PHP-монады
Алгебраические типы данных
- Произведения
- Типы-произведения в PHP
- Копроизведения
- Копроизведения в PHP
- Часть третья
Обработка null-значений
- Определение проблемы
- Пример
- Решение при помощи теории категорий
- Реализация решения
- Альтернативная реализация
- Замечание по поводу типов
Монада Either/Or, или обработка ошибок
- Определение проблемы
- Пример
- Решение при помощи теории категорий
- Реализация решения
- И то, и другое?
Логирование
- Определение проблемы
- Пример
- Решение при помощи теории категорий
- Реализация решения
Объединение монадического поведения
- Пример
- Основной принцип
- Связывание
- Лексеры
- Тестирование
- Анализ
- Преимущества ленивых вычислений
- Четвёртая часть
Возможности функциональных языков
- Автокаррирование
- Оптимизация рекурсии
- Изоморфическая оптимизаия
- Композиция функций
- Именование функций
- Дженерики
- Вызываемые типа
- Списковые выражения
- Встроенные опциональные типы данных
- Опциональная цепочка
- Нативный оператор связывания
- Перечислимые типы
Время думать функционально
- Избегайте глобального состояния
- Создавайте чистые функции
- Изолируйте операции ввода-вывода
- Избегайте циклов
- Смиритесь с объектами-значениями
- Смиритесь с функциями как значениями
- Создавайте вызываемые сервисы с одним методом
- Думайте категориями конвейера и потока данных
- Используйте монады Maybe и Either для обработки ошибок
- Не перебарщивайте
Дополнительные материалы
- Книги
- Видео
- Научные статьи
