Що таке функціональне програмування?
⚡ Розумний підсумок
Функціональне програмування — це спосіб створення програмного забезпечення шляхом композиції чистих функцій, уникаючи спільного стану та змінних даних. Воно наголошує на виразах над операторами, тому вихід функції залежить лише від її вхідних даних, що робить програми передбачуваними та тестованими.

Що таке функціональне програмування?
Функціональне програмування (також відоме як ФП) — це спосіб мислення про побудову програмного забезпечення шляхом створення чистих функцій. Він уникає концепцій спільного стану та змінних даних, що спостерігаються в об'єктно-орієнтованому програмуванні.
Функціональні мови наголошують на виразах та оголошеннях, а не на виконанні операторів. Тому, на відміну від інших процедур, які залежать від локального або глобального стану, вивід значення в FP залежить лише від аргументів, переданих функції.
Характеристики функціонального програмування
- Метод функціонального програмування зосереджений на результатах, а не на процесі.
- Акцент робиться на тому, що потрібно обчислити.
- Дані незмінні.
- Функціональне програмування розкладає проблему на функції.
- Він побудований на концепції математичних функцій, які використовують умовні вирази та рекурсію для виконання обчислень.
- Він не підтримує ітерацію, як оператори циклу, та умовні оператори, такі як If-Else.
Історія функціонального програмування
- Основою функціонального програмування є лямбда-числення. Воно було розроблено в 1930-х роках для функціонального застосування, визначення та рекурсії.
- LISP була першою функціональною мовою програмування. Маккарті розробив її в 1960 році.
- Наприкінці 70-х років дослідники з Единбурзького університету визначили ML (метамову).
- На початку 80-х років мова програмування Hope додала алгебраїчні типи даних для рекурсії та рівнянь.
- У 2004 році було впроваджено інновації у функціональну мову програмування Scala.
Мови функціонального програмування
Метою будь-якої мови функціонального програмування є імітація математичних функцій. Однак основний процес обчислення відрізняється у функціональному програмуванні.
Ось деякі з найвідоміших мов функціонального програмування:
- Haskell
- SML
- Clojure
- масштаб
- Ерланг
- Очистити
- F#
- ML/OCaml Lisp / Схема
- XSLT
- SQL
- Mathematica
Основна термінологія функціонального програмування та Concepts
Незмінні дані
Незмінні дані означають, що ви повинні мати змогу легко створювати структури даних, а не змінювати ті, що вже існують.
Посилальна прозорість
Функціональні програми повинні виконувати операції так само, ніби це відбувається вперше. Таким чином, ви будете знати, що могло статися або не статися під час виконання програми, та які побічні ефекти це може мати. У термінології функціонального планування це називається референційною прозорістю.
Модульність
Модульна конструкція підвищує продуктивність. Невеликі модулі можна швидко кодувати та мають більшу ймовірність повторного використання, що, безумовно, призводить до швидшої розробки програм. Крім того, модулі можна тестувати окремо, що допомагає скоротити час, витрачений на модульне тестування та налагодження.
Підтримка
Супровідність – це простий термін, який означає, що програмування FP легше підтримувати, оскільки вам не потрібно турбуватися про випадкові зміни чогось поза межами заданої функції.
Першокласна функція
«Функція першого класу» – це визначення, яке використовується для сутностей мови програмування, використання яких не обмежене. Тому функції першого класу можуть з'являтися будь-де в програмі.
Закриття
Замикання — це внутрішня функція, яка може отримувати доступ до змінних батьківської функції, навіть після того, як батьківська функція виконала свою функцію.
Функції вищого порядку
Функції вищого порядку приймають інші функції як аргументи або повертають їх як результати.
Функції вищого порядку дозволяють часткове застосування або каррування. Цей метод застосовує функцію до її аргументів по одному, причому кожне застосування повертає нову функцію, яка приймає наступний аргумент.
Чиста функція
«Чиста функція» — це функція, вхідні дані якої оголошено як вхідні, і жоден із них не повинен бути прихованим. Виходи також оголошуються як виходи.
Чисті функції діють на основі своїх параметрів. Вони неефективні, якщо нічого не повертають. Більше того, вони пропонують той самий результат для заданих параметрів.
приклад:
Function Pure(a,b) { return a+b; }
Нечисті функції
Нечисті функції є повною протилежністю чистим функціям. Вони мають приховані входи або виходи, і саме тому їх називають нечистими. Нечисті функції не можна використовувати або тестувати ізольовано, оскільки вони мають залежності.
Приклад
int z; function notPure(){ z = z+10; }
Функція Композиція
Композиція функцій — це поєднання 2 або більше функцій для створення нової.
Спільні стани
Спільний стан – це важлива концепція в ООП-програмуванні. По суті, це додавання властивостей до об'єктів. Наприклад, якщо жорсткий диск є об'єктом, ємність сховища та розмір диска можна додати як властивості.
Побічні ефекти
Побічні ефекти – це будь-які зміни стану, що відбуваються поза викликаною функцією. Найбільша мета будь-якої мови програмування FP – мінімізувати побічні ефекти, відокремивши їх від решти програмного коду. У програмуванні FP життєво важливо видалити побічні ефекти з решти вашої програмної логіки.
Переваги функціонального програмування
- Дозволяє уникнути заплутаних проблем та помилок у коді.
- Легше тестувати та виконувати модульне тестування та налагодження FP Code.
- Паралельна обробка та одночасність.
- Гаряче розгортання коду та відмовостійкість.
- Пропонує кращу модульність зі скороченим кодом.
- Підвищена продуктивність розробника.
- Підтримує вкладені функції.
- Функціональні конструкції, такі як Lazy Map & Lists тощо.
- Дозволяє ефективно використовувати лямбда-числення.
Обмеження функціонального програмування
- Парадигма функціонального програмування не є простою, тому її важко зрозуміти новачкам.
- Важко підтримувати, оскільки багато об'єктів еволюціонують під час кодування.
- Потребує багато глузувань та розширеної налаштування навколишнього середовища.
- Повторне використання є дуже складним і потребує постійного рефакторингу.
- Об'єкти можуть неправильно відображати проблему.
Функціональне програмування проти об’єктно-орієнтованого програмування
| Функціональне програмування | ООП |
|---|---|
| FP використовує незмінні дані. | ООП використовує змінні дані. |
| Дотримується моделі, заснованої на декларативному програмуванні. | Дотримується моделі імперативного програмування. |
| Основна увага приділяється: «Що ви робите в програмі». | Він зосереджується на: «Як ви програмуєте». |
| Підтримує паралельне програмування. | Немає підтримки паралельного програмування. |
| Його функції не мають побічних ефектів. | Метод може призвести до багатьох побічних ефектів. |
| Керування потоком виконується за допомогою викликів функцій і викликів функцій з рекурсією. | Процес керування потоком здійснюється за допомогою циклів та умовних операторів. |
| Порядок виконання операторів не дуже важливий. | Важливим є порядок виконання операторів. |
| Підтримує обидва «преси»trac«перетворення на дані» та «Абс.tracпитання поведінки». | Підтримує лише «прес»trac«перегляд даних». |

