Каррирование функций в JavaScript

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом практическом занятии мы изучим концепции каррирования и обратного каррирования функций в JavaScript. Каррирование функции - это техника, которая позволяет превратить функцию, принимающую несколько аргументов, в последовательность функций, каждая из которых принимает только один аргумент. С другой стороны, обратное каррирование функции - это процесс превращения последовательности функций, каждая из которых принимает только один аргумент, в функцию, принимающую несколько аргументов. В ходе этого практического занятия мы научимся реализовывать обе эти техники в JavaScript.

Обратное каррирование функции

Для обратного каррирования функции до заданной глубины используйте функцию uncurry.

const uncurry =
  (fn, n = 1) =>
  (...args) => {
    const next = (acc) => (args) => args.reduce((x, y) => x(y), acc);
    if (n > args.length) throw new RangeError("Arguments too few!");
    return next(fn)(args.slice(0, n));
  };

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

Если вы не укажете глубину, функция обратно каррирует до глубины 1.

const add = (x) => (y) => (z) => x + y + z;
const uncurriedAdd = uncurry(add, 3);
uncurriedAdd(1, 2, 3); // 6

Если количество переданных аргументов меньше заданной глубины, функция выбросит RangeError.

Резюме

Поздравляем! Вы завершили практическое занятие по обратному каррированию функций. Вы можете выполнить больше практических занятий в LabEx, чтобы улучшить свои навыки.