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