Files
freeCodeCamp/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/functional-programming/introduction-to-currying-and-partial-application.md
2023-03-28 21:16:03 +05:30

103 lines
3.0 KiB
Markdown
Raw 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.
---
id: 587d7dab367417b2b2512b70
title: Вступ до каррінгу та часткового застосування
challengeType: 1
forumTopicId: 301232
dashedName: introduction-to-currying-and-partial-application
---
# --description--
<dfn>Арність</dfn> функції — це кількість необхідних аргументів. <dfn>Каррінгом</dfn> функції називають перетворення функції з n-ною арністю у n-ну кількість функцій з арністю 1.
Іншими словами, структура функції змінюється так, що вона приймає один аргумент, потім повертається інша функція, яка приймає наступний аргумент і так далі.
Ось приклад:
```js
function unCurried(x, y) {
return x + y;
}
function curried(x) {
return function(y) {
return x + y;
}
}
const curried = x => y => x + y
curried(1)(2)
```
`curried(1)(2)` поверне `3`.
Каррінг корисний для програми, якщо ви не можете надати всі аргументи до функції одночасно. Ви можете зберегти кожен виклик функції у змінній, що матиме посилання на повернуту функцію, яка прийме наступний аргумент (щойно він буде доступний). Ось приклад використання вищезгаданої функції каррінгу:
```js
const funcForY = curried(1);
console.log(funcForY(2)); // 3
```
<dfn>Часткове застосування</dfn> можна описати як застосування декількох аргументів до функції одночасно і повернення іншої функції, яка застосовується до більшої кількості аргументів. Ось приклад:
```js
function impartial(x, y, z) {
return x + y + z;
}
const partialFn = impartial.bind(this, 1, 2);
partialFn(10); // 13
```
# --instructions--
Заповніть тіло функції `add` так, щоб вона використовувала каррінг для додавання параметрів `x`, `y` та `z`.
# --hints--
`add(10)(20)(30)` має повертати `60`.
```js
assert(add(10)(20)(30) === 60);
```
`add(1)(2)(3)` має повертати `6`.
```js
assert(add(1)(2)(3) === 6);
```
`add(11)(22)(33)` має повертати `66`.
```js
assert(add(11)(22)(33) === 66);
```
Ваш код повинен містити кінцеву інструкцію, яка повертає `x + y + z`.
```js
assert(code.match(/[xyz]\s*?\+\s*?[xyz]\s*?\+\s*?[xyz]/g));
```
# --seed--
## --seed-contents--
```js
function add(x) {
// Only change code below this line
// Only change code above this line
}
add(10)(20)(30);
```
# --solutions--
```js
const add = x => y => z => x + y + z
```