Notatky logo
Published on

Функціональне програмування

Автори
  • avatar
    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'}

Приклади ситуацій

  1. Користувач позначає завдання як виконане.
  • Це подія користувача є дією, тому що залежить від того, скільки разів вона трапляється.
  1. Користувач надсилає повідомлення на сервер.
  • Це також дія, хоч саме повідомлення є даними.
  1. Сервер приймає рішення про те, кого сповістити.
  • Це обчислення: для однакових аргументів результат завжди однаковий.

Як покращити функцію

  1. Відокремлюйте бізнес-логіку від оновлення DOM.
  2. Не використовуйте глобальні змінні та не залежіть від них.
  3. Завжди повертайте результат із функції.
  4. Уникайте оновлення DOM із функцій.
  5. Розділяйте обчислення та дії.
  6. Мінімізуйте використання неявних вхідних даних (implicit inputs).
  7. Мінімізуйте неявні вихідні дані (implicit outputs).

Організація обчислень

При проектуванні бізнес-логіки у функціональному стилі можна організовувати обчислення в різні категорії:

  • Операції з кошиком: Додавання або видалення товарів у кошику покупця.
  • Операції з елементами: Обробка окремих об'єктів, наприклад, товарів.
  • Бізнес-правила: Логіка, що визначає поведінку системи на основі бізнес-вимог.
  • Інструменти роботи з даними: Допоміжні функції для маніпулювання колекціями.

Посилання:

Eric, N. (2021). Grokking Simplicity. Manning.