Це запитання доволі часто звучить на Frontend інтервʼю і часто його задають на проєктах, які почали створювати 5 - 7 років тому. Так як саме в той час функціональне програмування було на своєму піку в світі JS і дуже часто використовували бібліотеки по типу Ramda.js.
Currying (карування) — це техніка у функціональному програмуванні, коли функція, що приймає кілька аргументів, перетворюється на ланцюжок функцій, які приймають по одному(або більше) аргументу і повертають наступну функцію.
Розберемо приклад
В нас є функція sum і якщо не використовувати Currying, ми маємо відразу передати всі три аргументи, щоб функція спрацювала коректно. Але з Currying ми можемо передати аргументи частково. Наприклад, спочатку передати a, після чого функція не виконається, а поверне іншу функцію, яка прийме b i c. Далі, ми можемо або передати b i c або тільки b, тоді повернеться функція, яка прийме c. І вже після передачі c, функція виконається.
Прикладом нативної реалізації Currying є функція bind з JavaScript. Хоч і технічно це не зовсім він, а його простіша версія - partial application(часткове використання). Тим не менш, bind наглядно показує, наскільки сильна ця техніка і які проблеми може вирішувати.
Для тих, хто хоче копнути глибше в тему функціонального програмування, рекомендую розпочати з Ramda.js - https://ramdajs.com/. Паралельно до читання документації варто розбирати з ChatGPT різні поняття, які будуть зустрічатися в процесі.