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