3.1Kпросмотров
30 апреля 2024 г.
🎬 ВидеоScore: 3.4K
Каррирование в JavaScript — это преобразования функции, принимающей несколько аргументов, в последовательность функций, каждая из которых принимает один аргумент. Суть каррирования заключается в том, что когда функция принимает несколько аргументов, вы можете вызвать её, передав только часть аргументов. В ответ функция возвращает новую функцию, которая ожидает оставшиеся аргументы. Пример: function sum(a, b, c) { return a + b + c;
} // Некаррированная функция, вызывается с тремя аргументами сразу:
console.log(sum(1, 2, 3)); // Выведет 6 // Каррированная версия той же функции:
function currySum(a) { return function(b) { return function(c) { return a + b + c; }; };
} // Каррированная функция вызывается с одним аргументом три раза:
const curriedSum = currySum(1);
const addTwo = curriedSum(2);
const result = addTwo(3); console.log(result); // Выведет 6 В примере выше, первая функция sum принимает все аргументы сразу. В тоже время Каррированная функция currySum, принимает первый аргумент и возвращает новую функцию, которая ожидает второй аргумент, и так далее. Мы так же можем реализовать Каррирование более элегантно с помощью рекурсии, позволяя каррировать функцию с любым количеством аргументов: function curry(func) { return function curried(...args) { if (args.length >= func.length) { return func.apply(this, args); } else { return function(...args2) { return curried.apply(this, args.concat(args2)); } } };
} const curriedSum = curry(sum); console.log(curriedSum(1)(2)(3)); // Выведет 6 Эта версия функции curry принимает исходную функцию sum и возвращает каррированную версию, которой можно передавать аргументы один за другим или группами, до тех пор пока не будет достаточно аргументов (в нашем случае их 3), чтобы вызвать исходную функцию. Когда все аргументы собраны, вызывается исходная функция sum с этими аргументами. @CCODE | JS ⚡️