Skip to main content

Композиція функцій

Коротко: Композиція функцій (function composition) - це спосіб об'єднувати кілька функцій в одну, так що результат однієї функції стає входом для наступної.

Простіше кажучи:

композиція - це коли ти чіпляєш функції одна за одною, щоб виконувати послідовні перетворення даних.


Детальне пояснення

Якщо є функції f і g, то їхня композиція compose(f, g) означає:

javascript
compose(f, g)(x) === f(g(x))

Тобто спочатку виконується g(x), а потім результат передається у f().


Приклад 1 - вручну

javascript
const toUpper = str => str.toUpperCase(); const exclaim = str => str + '!'; const shout = str => exclaim(toUpper(str)); console.log(shout('hello')); // "HELLO!"

Тут shout - це композиція функцій toUpper і exclaim.


Приклад 2 - універсальна функція compose

javascript
function compose(...fns) { return x => fns.reduceRight((v, fn) => fn(v), x); } const toUpper = str => str.toUpperCase(); const exclaim = str => str + '!'; const greet = str => `Hello, ${str}`; const welcome = compose(exclaim, toUpper, greet); console.log(welcome('bob')); // "HELLO, BOB!"

compose виконує функції справа наліво: compose(f3, f2, f1)(x)f3(f2(f1(x)))


Приклад 3 - через pipe (зліва направо)

Для читабельності часто використовують протилежний порядок - pipe:

javascript
const pipe = (...fns) => x => fns.reduce((v, fn) => fn(v), x); const result = pipe( greet, toUpper, exclaim )('bob'); console.log(result); // "HELLO, BOB!"

pipe(f1, f2, f3)(x)f3(f2(f1(x))), але читається зліва направо, як природний потік даних.


Навіщо потрібна композиція

Робить код декларативним і читабельним Дозволяє будувати складні перетворення із простих функцій Підвищує перевикористовуваність і тестованість Це основа функціонального програмування


Аналогія

Уяви конвеєр:

javascript
вхід → функція A → функція B → функція C → результат

Композиція дозволяє зібрати цей конвеєр в одну функцію.


ПІДСУМОК

ВластивістьКомпозиція функцій
Що робитьОб'єднує кілька функцій в один ланцюжок
НапрямокЗазвичай справа наліво (compose) або зліва направо (pipe)
Формулаcompose(f, g)(x) = f(g(x))
ПеревагиЧистота, перевикористовуваність, читабельність
Прикладcompose(toUpper, trim)(str)

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.