Жаргон функционального программирования:
🗄Arity (арность) — количество аргументов функции. От слов унарный, бинарный, тернарный (unary, binary, ternary) и так далее. Это необычное слово, потому что состоит из двух суффиксов: «-ary» и «-ity».
🗄Higher-Order Functions (функции высокого порядка) — функция, которая принимает функцию в качестве аргумента и/или возвращает функцию.
🗄Partial Application (частичное применение) — частичное применение функции означает создание новой функции с пред-заполнением некоторых аргументов оригинальной функции.
🗄Currying (каррирование) — процесс конвертации функции, принимающей несколько аргументов, в функцию, принимающую один аргумент за раз. При каждом вызове она принимает один аргумент и возвращает функцию, принимающую один аргумент до тех пор, пока все аргументы не будут обработаны.
🗄Auto Currying (автоматическое каррирование) — трансформация функции, принимающей несколько аргументов, в новую, если передать меньшее чем предусмотрено количество аргументов, то она вернет функцию, которая принимает оставшиеся аргументы. Если функция получает правильное количество аргументов, то она исполняется.
🗄Function Composition (композиция функций) — соединение двух функций для формирования новой функции, в которой вывод первой функции является вводом второй.
🗄Purity (чистота) — функция является чистой, если возвращаемое ей значение определяется исключительно вводными значениями, и функция не имеет побочных эффектов.
🗄Side effects (побочные эффекты) — у функции есть побочные эффекты если кроме возврата значения она взаимодействует (читает или пишет) с внешним изменяемым состоянием.
🗄Idempotent (идемпотентность) — функция является идемпотентной если повторное ее исполнение производит такой же результат.
🗄Point-Free Style (бесточечная нотация) — написание функций в таком виде, что определение неявно указывает на количество используемых аргументов. Такой стиль обычно требует каррирования или другой функции высокого порядка (или в целом — неявного программирования).
🗄Predicate (предикат) — функция, которая возвращает true или false в зависимости от переданного значения. Распространенный случай использования предиката — функция обратного вызова (callback) для фильтра массива.
🗄Categories (категории) — объекты с функциями, которые подчиняются определенным правилам. Например, моноиды.
🗄Value (значение). Все, что может быть присвоено переменной.
🗄Constant (константа) — переменная, которую нельзя переназначить после определения. Константы обладают референциальной прозрачностью или прозрачностью ссылок (referential transparency). То есть, их можно заменить значениями, которые они представляют, и это не повлияет на результат.
🗄Functor (функтор) — объект, реализующий функцию map, которая при проходе по всем значениям в объекте создает новый объект, и подчиняется двум правилам: сохраняет нейтральный элемент (identity); поддерживает композицию.
🗄Pointed Functor (указывающий функтор) — объект с функцией of с любым значением. В ES2015 есть Array.of, что делает массивы указывающим функтором.
🗄Lifting — когда значение помещается в объект вроде функтора. Если «поднять» (lift) функцию в аппликативный функтор, то можно заставить ее работать со значениями, которые также присутствуют в функторе.
🗄Referential Transparency (прозрачность ссылок) — если выражение можно заменить его значением без влияния на поведение программы, то оно обладает прозрачностью ссылок.
🗄Lambda (лямбда) — анонимная функция, которую можно использовать как значение. Лямбды часто передают в качестве аргументов в функции высокого порядка. Лямбду можно присвоить переменной.
🗄Lambda Calculus (лямбда-исчисление) — область информатики, в которой функции используются для создания универсальной модели исчисления.
🗄Lazy evaluation (ленивые вычисления) — механизм вычисления «при необходимости», с задержкой вычисления выражения до того момента, пока значение не потребуется.👇