Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Каррування проти часткового застосування». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Currying (каррування)** перетворює функцію з кількома аргументами на ланцюжок функцій, кожна з яких приймає рівно один аргумент, а **partial application (часткове застосування)** створює нову функцію із заздалегідь заданими аргументами, не змінюючи їхню кількість. **Ключове:** currying завжди повертає функцію, що очікує один наступний аргумент, а partial application може одразу приймати кілька решти аргументів.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Partial application (часткове застосування)** і **currying (каррування)** справді схожі - обидві техніки дозволяють **частково передавати аргументи** функції. Але між ними є **чітка відмінність за суттю та метою**. --- ## 1. Визначення ### **Каррування (Currying)** Перетворює функцію з *n* аргументами на ланцюжок функцій, кожна з яких приймає **рівно один аргумент**. ```javascript // Вихідна функція function add(a, b, c) { return a + b + c; } // Каррована версія const curriedAdd = a => b => c => a + b + c; curriedAdd(1)(2)(3); // 6 ``` Кожен виклик повертає нову функцію, яка очікує наступний аргумент. Каррування - це **чисте функціональне перетворення сигнатури**. --- ### **Часткове застосування (Partial Application)** Створює нову функцію із **заздалегідь заданими (частково застосованими)** аргументами, але **не змінює кількість аргументів** самої функції. ```javascript function add(a, b, c) { return a + b + c; } // Частково застосовуємо перший аргумент const add1 = add.bind(null, 1); add1(2, 3); // 6 ``` > Partial просто фіксує частину аргументів, а решту можна передати пізніше **разом**. --- ## 2. Головна відмінність | Критерій | **Currying** | **Partial Application** | |---|---|---| | **Що робить** | Розбиває функцію на ланцюжок функцій по одному аргументу | Фіксує частину аргументів вихідної функції | | **Кількість аргументів за крок** | 1 аргумент на кожен виклик | Кілька аргументів можна передати одразу | | **Повертає** | Функцію, що очікує **один** наступний аргумент | Функцію, що очікує **решту** аргументів | | **Приклад виклику** | `f(a)(b)(c)` | `f(a, b)(c)` або `f(a)(b, c)` | | **Мета** | Уніфікація виклику та композиція | Повторне використання функції із заздалегідь заданими аргументами | --- ## Приклад для наочності: ### Каррування: ```javascript const multiply = a => b => c => a * b * c; multiply(2)(3)(4); // 24 ``` ### Часткове застосування: ```javascript function multiply(a, b, c) { return a * b * c; } const double = multiply.bind(null, 2); // фіксуємо a=2 double(3, 4); // 24 ``` --- ## Підсумок: > **Currying** - це формальне перетворення функції на послідовність викликів по одному аргументу. > **Partial Application** - це практична техніка, щоб заздалегідь підставити частину аргументів, а решту передати пізніше.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.