Применение чистого ФП в построении последовательности действий
Суть парадигмы функционального программирования заключена в том, чтобы весь алгоритм трактовался как вычисление каких-то функций в их математическом понимании. Функции в ФП, в отличие от объектов в ООП, не должны затрагивать какой-то объект или контекст, в котором работают. Они - как неизменные законы Вселенной: работают всегда и предсказуемо... если, конечно, их правильно определить.
Одно из применений ФП заключается в том, чтобы автоматизировать рутинные процессы, а не порождать новые сущности в виде глобальных переменных, объектов и прочего.
Чистые функции обладают тремя клёвыми вещами:
- Если результат функции не использован, нет смысла вызывать функцию, и её можно удалить.
- Результат вызова чистой функции может быть сохранён, чтобы потом использоваться в вычислениях повторно.
- Если у двух и более функций нет зависимости по данным, то порядок их вычисления можно поменять или распараллелить.
Как писать код в соответствии с ФП? Следуйте примерам кода.
Пример 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)))