Коротка відповідь
seniorФункціональне програмування — це парадигма, де дані не змінюються, а логіка реалізується через чисті функції. Чисті функції приймають аргументи і повертають нове значення без побічних ефектів. У JavaScript це означає використання `map`, `reduce` і замикань, що дозволяє легко тестувати та масштабувати код.
Повне пояснення
Що це і навіщо
- Функціональне програмування (FP) — парадигма, що підкреслює використання чистих функцій і незмінності даних. Це зменшує кількість помилок, пов’язаних із станом, і полегшує паралельне виконання.
Ключові принципи
- Чисті функції: однаковий вхід → однаковий вихід, без побічних ефектів.
- Неперемінність: об’єкти/масиви не змінюються, створюється новий екземпляр.
- Функції‑вищого порядку: функція приймає іншу функцію як аргумент або повертає її.
- Рекурсія: замість циклів часто використовується рекурсивний виклик.
Як це працює
- Дані проходять через послідовність функцій, кожна з яких повертає новий результат. Це створює ланцюжок «потоку» даних.
- Приклад:
const doubled = nums.map(n => n * 2); const sum = doubled.reduce((a,b)=>a+b,0);–mapстворює новий масив без зміни оригіналу, аreduceагрегує значення.
Практика і реалізація (JavaScript/TypeScript)
- Використання
Array.prototype.map,filter,reduce. - Створення функцій‑вищого порядку:
const withLogging = fn => (...args) => { console.log(args); return fn(...args); }. - Застосування
Object.freezeабо бібліотек типу Immutable.js для забезпечення незмінності.
Тестування
- Чисті функції легко тестувати:
expect(add(2,3)).toBe(5);. - Використання Jest або Vitest для unit‑тестів.
Безпека та приватність
- Відсутність побічних ефектів зменшує ризик непередбачуваних змін стану, що важливо при роботі з конфіденційними даними.
Оптимізація та edge‑cases
- Пам’ять: рекурсія може викликати переповнення стеку; використовуйте хвостову рекурсію або ітеративні підходи.
- Паралелізм: FP легко комбінувати з
Promise.allабо Web Workers.
Часті помилки
- Зміна оригінальних об’єктів замість створення копій.
- Використання глобального стану всередині чистих функцій.
Cheatsheet
map– трансформує масив.filter– відбирає елементи.reduce– агрегує.compose(f,g)– виконуєf(g(x)).