Devs Hive
Повернутися до всіх запитань

Що таке Currying?

Junior/Middle/SeniorJavaScript
Зустрічали на інтервʼю:1 користувач

Це запитання доволі часто звучить на Frontend інтервʼю і часто його задають на проєктах, які почали створювати 5 - 7 років тому. Так як саме в той час функціональне програмування було на своєму піку в світі JS і дуже часто використовували бібліотеки по типу Ramda.js.

Currying (карування) — це техніка у функціональному програмуванні, коли функція, що приймає кілька аргументів, перетворюється на ланцюжок функцій, які приймають по одному(або більше) аргументу і повертають наступну функцію.

Розберемо приклад

В нас є функція sum і якщо не використовувати Currying, ми маємо відразу передати всі три аргументи, щоб функція спрацювала коректно. Але з Currying ми можемо передати аргументи частково. Наприклад, спочатку передати a, після чого функція не виконається, а поверне іншу функцію, яка прийме b i c. Далі, ми можемо або передати b i c або тільки b, тоді повернеться функція, яка прийме c. І вже після передачі c, функція виконається.

sum(a, b, c)

const partial1 = sum(1) // передаємо а

const partial2 = partial1(2) // partial1 тепер приймає b i c, передаємо b

const partial3 = partial2(3) // partial2 приймає c, передаємо с

// Так як функція отримала всі аргументи, partial3 запустить її виконання

Прикладом нативної реалізації Currying є функція bind з JavaScript. Хоч і технічно це не зовсім він, а його простіша версія - partial application(часткове використання). Тим не менш, bind наглядно показує, наскільки сильна ця техніка і які проблеми може вирішувати.

Для тих, хто хоче копнути глибше в тему функціонального програмування, рекомендую розпочати з Ramda.js - https://ramdajs.com/. Паралельно до читання документації варто розбирати з ChatGPT різні поняття, які будуть зустрічатися в процесі.

Зустрічав на інтервʼю?

Коментарі (0)

Увійдіть, щоб залишити коментар

Поки що немає коментарів. Будьте першим!