Функціональне програмування - декларативна парадигма. Однією з найсильніших проблем ФП є те, що уникати побічних ефектів. Кажуть, що для деяких проблем FP не підходить.
Для яких загальних проблем не підходить функціональне програмування?
Функціональне програмування - декларативна парадигма. Однією з найсильніших проблем ФП є те, що уникати побічних ефектів. Кажуть, що для деяких проблем FP не підходить.
Для яких загальних проблем не підходить функціональне програмування?
Відповіді:
Програми, які мають дуже великий характер. Відеоігри - хороший приклад, тому що вони моделюють реальний світ. Набагато більше сенсу думати про зміну стану світу, а не про перебудову з попереднього стану кожного разу, коли щось змінюється.
Конкретним прикладом може стати зміна здоров’я монстра після його пострілу. Набагато розумніше просто змінити своє здоров'я, ніж замінити його абсолютно новим чудовиськом, яке є однаковим у всіх відношеннях, за винятком того, що тепер у нього менше здоров’я. Такі зміни складають майже все в ігровому світі, і робити це в чисто функціональній манері не дуже інтуїтивно. Я думаю, що можуть бути певні покарання за ефективність роботи, принаймні, якщо ви робите це чисто функціональною мовою.
(Як зауваження, деякі проблеми в іграх дуже добре підходять для функціонального програмування, наприклад, AI. Гібридна функціональна / імперативна мова була б чудовою для цих випадків.)
Вбудоване програмування в реальному часі - це все про побічні ефекти. Взаємодіючи з цифровими та аналоговими іо, таймерами, послідовними та паралельними портами, все цікаве робиться за допомогою виклику функцій із бічними ефектами.
Я заперечую, що програмування GUI не дуже підходить для функціонального програмування. Графічні інтерфейси, як правило, дуже стані, і моделювати / керувати ними за допомогою стану набагато простіше, ніж використовувати вільний від побічних ефектів. Звичайно, можна використовувати функціональну мову програмування для графічних інтерфейсів ... але це, мабуть, не дуже гарна ідея.
Як зазначається в іншій відповіді, іграми часто простіше керувати, відстежуючи стан, і хоча ви можете писати гру на функціональній мові, це часто простіше і ефективніше робити це "державною" мовою (тобто, орієнтованою на об'єкти мова).
Бізнес-додатки, керовані даними. Інтерфейс користувача та прості операції з передачею даних не потребують FP.
filter
, reduce
і map
. Киньте в деяких sort
, partition
, groupBy
. Зрештою, найбільш широко використовуваною мовою програмування для написання таких додатків є Excel, яка є функціональною мовою.
Ви не можете легко відхилити будь-яку проблему, яка сама по собі не підходить для функціонального програмування.
Багато що залежить від фактичної мови, що використовується для функціонального програмування та його особливостей.
Одним із прикладів є вже згаданий Erlang для вбудованих систем у реальному часі.
Повнота держави також не є хорошим критерієм проти функціонального програмування. Існує кілька успішних способів, реалізованих у мовах функціонального програмування для вирішення цього питання.
Побічні ефекти також часто згадуються проти функціонального програмування. Кожна програма, яка не є повністю соліпсистичною, має побічні ефекти. Таким чином, кожна реальна мова FP має певний спосіб впоратися з цим, лише питання про те, наскільки витончено укласти світові побічні ефекти.
Зовсім немає необхідності в таких довільних побічних ефектах, як глобальні змінні.
Але існують набори проблем, які полегшують функціональне програмування, оскільки вони не сильно перекручують ваш звичний погляд на проблему. Але як тільки вам вдасться подумати про функціональність, все більше наборів проблем відкриваються для менших побічних ефектів.
Навіть при програмуванні C завжди корисно максимально зменшити довільні побічні ефекти, такі як глобальні змінні.