Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Часткове застосування». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Часткове застосування (partial application)** - це прийом, при якому функція викликається не з усіма аргументами одразу: частина аргументів "запам'ятовується", а повертається нова функція, яка чекає на решту. На відміну від каррування, де аргументи приймаються по одному, тут можна зафіксувати одразу декілька. **Ключове:** типовий приклад - `fn.bind(null, arg1)`, який повертає нову функцію із заздалегідь підставленим аргументом.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Коротко:** **Часткове застосування (partial application)** - це прийом, при якому функція викликається **не з усіма аргументами одразу**, а **частина аргументів "запам'ятовується"**, і повертається **нова функція**, яка чекає на аргументи, що залишилися. --- ### Детальне пояснення > Ідея: "зафіксувати" частину параметрів функції, > щоб отримати нову, більш конкретну функцію. На відміну від **каррування**, де функція приймає **по одному аргументу**, при частковому застосуванні можна передати **одразу декілька**. --- ### Приклад 1 - проста реалізація ```javascript function multiply(a, b, c) { return a * b * c; } // Частково застосовуємо: фіксуємо a = 2 function partialMultiply(a) { return function(b, c) { return multiply(a, b, c); }; } const double = partialMultiply(2); console.log(double(3, 4)); // 24 ``` Ми "зафіксували" перший аргумент (`a = 2`) і отримали нову функцію `double`. --- ### Приклад 2 - з `bind()` JavaScript вже дозволяє робити часткове застосування за допомогою `Function.prototype.bind`: ```javascript function add(a, b, c) { return a + b + c; } const add5 = add.bind(null, 5); // фіксуємо a = 5 console.log(add5(10, 20)); // 35 ``` `bind` створює нову функцію з уже підставленими аргументами. --- ### Приклад 3 - універсальна функція partial ```javascript function partial(fn, ...fixedArgs) { return (...remainingArgs) => fn(...fixedArgs, ...remainingArgs); } function greet(greeting, name) { return `${greeting}, ${name}!`; } const sayHi = partial(greet, 'Привіт'); console.log(sayHi('Alice')); // "Привіт, Alice!" ``` --- ### Відмінність від каррування | Прийом | Що робить | |---|---| | **Каррування** | Перетворює функцію з кількома аргументами на ланцюг функцій по одному аргументу (`f(a)(b)(c)`) | | **Часткове застосування** | Підставляє частину аргументів і повертає нову функцію (`f(a, b, c)` -> `g(b, c)`) | --- ### Навіщо потрібне часткове застосування Повторне використання функцій з різними контекстами Спрощення викликів і конфігурацій Підвищення читабельності Часто використовується у **функціональному програмуванні**, **React** і **middleware** --- ### Підсумок | Властивість | Часткове застосування | |---|---| | Суть | "Запам'ятовує" частину аргументів | | Повертає | Нову функцію | | Приклад | `add.bind(null, 5)` або `partial(add, 5)` | | Відмінність від каррування | Приймає кілька аргументів за раз | | Користь | Повторне використання і спрощення коду |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.