Files
2025-03-28 14:35:27 +03:00

78 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
sidebar_position: 12
---
# Каррирование (currying)
**Каррирование (currying)** в JavaScript — это процесс преобразования функции с несколькими аргументами в последовательность функций, каждая из которых принимает только один аргумент.
Каррирование это трансформация функций таким образом, чтобы они принимали аргументы не как `f(a, b, c)`, а как `f(a)(b)(c)`.\
Каррирование не вызывает функцию. Оно просто трансформирует её.\
Делает код более декларативным и удобным для переиспользования.
## Основная идея:
Вместо:
```js
function sum(a, b, c) {
return a + b + c;
}
sum(1, 2, 3); // 6
```
После каррирования:
```js
function curriedSum(a) {
return function(b) {
return function(c) {
return a + b + c;
};
};
}
curriedSum(1)(2)(3); // 6
```
## Зачем нужно каррирование?
1. **Частичное применение** — можно фиксировать часть аргументов и получать новую функцию:
```js
const addTwo = curriedSum(1)(2);
addTwo(3); // 6
addTwo(5); // 8
```
2. **Удобство композиции функций** — каррированные функции легче комбинировать.
3. **Чистые функции** — каррирование часто используется в функциональном программировании.
## Автоматическое каррирование (с помощью утилит):
Можно написать вспомогательную функцию:
```js
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function(...args2) {
return curried.apply(this, args.concat(args2));
};
}
};
}
const curriedSum = curry(sum);
curriedSum(1)(2)(3); // 6
curriedSum(1, 2)(3); // 6
```
🔹 Пример из реального мира (React + Redux):
```js
const connect = (mapStateToProps) => (mapDispatchToProps) => (Component) => {
// логика подключения компонента
console.log();
});
// Использование:
connect(mapState)(mapDispatch)(MyComponent);
```
🚀 **_Источник: DeepSeek_** \
🚀 **Источник: [https://learn.javascript.ru/currying-partials](https://learn.javascript.ru/currying-partials)**