- Published on
Функціональне програмування
- Автори
- Name
- Еклезіаст
- github
Що таке функціональне програмування
Функціональне програмування — це парадигма програмування, що фокусується на використанні чистих функцій і уникненні побічних ефектів. Основна ідея полягає в тому, щоб писати передбачуваний і легкий для тестування код, розділяючи логіку на незалежні частини.
Основні терміни
Чисті функції (Pure funсtions): Функції, результат яких залежить лише від вхідних аргументів і які не мають побічних ефектів. Вони завжди повертають той самий результат для одних і тих самих аргументів.Побічні ефекти (Side effects): Будь-які зміни у зовнішньому стані чи операції, що впливають на середовище поза функцією, як-от зміна глобальної змінної, запис у базу даних, надсилання HTTP-запиту або оновлення DOM.
Примітка: Незважаючи на те, що функціональне програмування в теорії передбачає відсутність побічних ефектів, у реальному світі повністю уникнути їх неможливо. Однак важливо звести їх до мінімуму та контролювати їх місце в програмі.
Важливо розглядати функціональне програмування як набір концепцій і підходів, що допомагають структурувати код.
Дії, обчислення та дані
Функціональне програмування часто ділить код на три основні категорії:
Дія (Action): Операції, результат яких залежить від часу, місця виклику або кількості викликів. Приклади: надсилання електронного листа, збереження даних у базі, отримання поточного часу.Обчислення (Calculation): Чисті функції, які залежать тільки від вхідних аргументів і завжди повертають той самий результат. Приклади: підрахунок суми масиву, визначення довжини рядка.Дані (Data): Інертні структури, які описують факти або збережені значення без будь-якої логіки. Приклади: масив чисел, об'єкт із даними користувача.
У функціональному програмуванні важливо розуміти та розрізняти ці категорії, оскільки на цій концепції грунтуються багато інших концептів
Приклади коду
// Дії
sendEmail(to, from, subject, body)
saveUserDb(user)
getCurrentTime()
// Обчислення
sum(numbers)
stringLength(str)
// Дані
[1, 2, 5, 7, 9]
{firstName: 'John', lastName: 'Doeh'}
Перевагу віддавайте даним перед обчисленням, та обчисленню перед діями
Приклади ситуацій
- Користувач позначає завдання як виконане.
- Це подія користувача є
дією, тому що залежить від того, скільки разів вона трапляється.
- Користувач надсилає повідомлення на сервер.
- Це також
дія, хоч саме повідомлення єданими.
- Сервер приймає рішення про те, кого сповістити.
- Це
обчислення: для однакових аргументів результат завжди однаковий.
Як покращити функцію
- Відокремлюйте бізнес-логіку від оновлення DOM.
- Не використовуйте глобальні змінні та не залежіть від них.
- Завжди повертайте результат із функції.
- Уникайте оновлення DOM із функцій.
- Розділяйте обчислення та дії.
- Мінімізуйте використання неявних вхідних даних (implicit inputs).
- Мінімізуйте неявні вихідні дані (implicit outputs).
Організація обчислень
При проектуванні бізнес-логіки у функціональному стилі можна організовувати обчислення в різні категорії:
- Операції з кошиком: Додавання або видалення товарів у кошику покупця.
- Операції з елементами: Обробка окремих об'єктів, наприклад, товарів.
- Бізнес-правила: Логіка, що визначає поведінку системи на основі бізнес-вимог.
- Інструменти роботи з даними: Допоміжні функції для маніпулювання колекціями.
Посилання:
Eric, N. (2021). Grokking Simplicity. Manning.