Код
January 23, 2020

Применение чистого ФП в построении последовательности действий

Суть парадигмы функционального программирования заключена в том, чтобы весь алгоритм трактовался как вычисление каких-то функций в их математическом понимании. Функции в ФП, в отличие от объектов в ООП, не должны затрагивать какой-то объект или контекст, в котором работают. Они - как неизменные законы Вселенной: работают всегда и предсказуемо... если, конечно, их правильно определить.

Одно из применений ФП заключается в том, чтобы автоматизировать рутинные процессы, а не порождать новые сущности в виде глобальных переменных, объектов и прочего.

Чистые функции обладают тремя клёвыми вещами:

  1. Если результат функции не использован, нет смысла вызывать функцию, и её можно удалить.
  2. Результат вызова чистой функции может быть сохранён, чтобы потом использоваться в вычислениях повторно.
  3. Если у двух и более функций нет зависимости по данным, то порядок их вычисления можно поменять или распараллелить.

Как писать код в соответствии с ФП? Следуйте примерам кода.

Пример 1. Поведение чистой функции зависит только от входных данных.

def f(x):
    return x ** 2

Пример 2. Функция всегда должна возвращать результат.

def superise(x):
    return [i for i in range(x) if i % 2 == 0]

Пример 3. Для смены поведения используй функцию высшего порядка.

def f(x):
    return x + 3

def g(function, x):
    return function(x) * function(x)

print(g(f, 7))

Пример 4. Рекурсия как способ организации последовательных вычислений.

def r(x):
    return (x if x == 1 else r(x - 1) + 1)

Пример 5. Каскадное применение функций как воплощение целого алгоритма.

def a(x):
    return [6, x, 8]

def sum2(x):
    return (x[0] + x[1] if len(x) == 2 else sum([x[0] + x[1]] + x[2:]))

print(sum2(a(7)))