Functional Programming
Основные идеи
- Одного или нескольких типов данных
- Операциях на этих данных
- Законы, которые описывают отношения между значениями и операциями
- Никаких мутаций! (Изменений состояний)
Цель:
- Сконцентрироваться на основных идеях
- Избежать изменения состояния
- Иметь возможность использовать абстракцию для составление сложных функций из простых
Functional Programming
- В узком смысле - программирование без изменения состояния, циклов, присваивания и других структур, присущих императивному программированию
- В широком смысле - фокусирование на функциях
- Функции как основная единица абстракции
- Функции могут быть определены где угодно, в том числе внутри других функций,
- Функции могут создаваться, возвращаться как результат, и передаваться в качестве параметров другим функциям
- Из простых функций можно составлять более сложные функции
Функции, которые принимают другие функции в качестве аргументов или возвращают в качестве результата, называют функциями высшего порядка.
Преимущества
- Легко понимать и писать
- Модульность
- Легко параллелить
Вычисление выражений
Так как в функциональных языках нет никаких побочных эффектов (т.к. нет изменений состояния), то для вычисления выражения можно использовать the Substitution Model [1]
- Основная идея: постепенно приводить выражение к некоторому значению
- Это называется [math]\lambda[/math]-calculus (лямбда-вычисление) - основа функционального программирование
Побочный эффект (side-effect) изменение в однажды заданных определениях. Функции с побочным эффектом не могут быть выражены с помощью этой модели.
Алгоритм
- Вычислить все значения аргументов функции слева направо
- В коде заменить вызов функции на тело этой функции
- Заменить формальные аргументы в теле функции на значения
Функциональные языки
Литература
- Structure and Interpretation of Computer Programs [2] [3]
- А. Филд, П. Харрисон, Functional Programming.
Sources