Я пытаюсь понять концепции и основы функционального программирования. Я не собираюсь хардкор с Haskell или Clojure или Scala. Вместо этого я использую JavaScript.
Итак, если я правильно понял, идея функционального программирования состоит в том, чтобы создать программное приложение с использованием Pure Functions, которое заботится о том, чтобы обрабатывать единственную ответственность / функциональность в приложении. без каких-либо побочных эффектов.
Композиция происходит таким образом, что выходные данные одной функции передаются как входные данные для другой (в соответствии с логикой c).
I напишите 2 функции для удвоения и приращения соответственно, которые принимают целое число в качестве аргумента. Затем следует служебная функция, которая составляет функции, переданные в качестве аргументов.
{
// doubles the input
const double = x => x * 2
// increments the input
const increment = x => x + 1
// composes the functions
const compose = (...fns) => x => fns.reduceRight((x, f) => f(x), x)
// input of interest
const arr = [2,3,4,5,6]
// composed function
const doubleAndIncrement = compose(increment, double)
// only doubled
console.log(arr.map(double))
// only incremented
console.log(arr.map(increment))
// double and increment
console.log(arr.map(doubleAndIncrement))
}
Выводы следующие:
[4, 6, 8, 10, 12] // double
[3, 4, 5, 6, 7] // increment
[5, 7, 9, 11, 13] // double and increment
Итак, мой вопрос в том, что функция ReduRight будет работать через массив дважды в этом случае для применения двух функций.
Если массив увеличится в размере, не будет ли это неэффективным?
Используя al oop, это можно сделать в одном обходе с двумя операциями в одном l oop.
Как это можно предотвратить или моё понимание неверно каким-либо образом?