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


38

Яка угода з функціональним програмуванням? Я бачу, що про це говорять багато, але якщо чесно, я ніколи не вважав їх корисними. Чому так багато університетів, мабуть, навчають їх?


6
Дуже великий в програмуванні AI.
аква

3
@aqua - це не повинно бути відповіддю, чому б ні?
Мартін Бекетт

5
Я також хотів би зазначити, що навіть традиційні мови ОО починають включати поняття з функціонального програмування. Linq (в .NET), будучи конкретним випадком.
apoorv020

Я думаю, що функціональне програмування більше вправляє ваш мозок, і це може призвести до справді короткого коду. Так що це досить круто.
Адель

2
@ apoorv020: І дженерики, кортежі та збирання сміття, і ... все виникли на функціональних мовах.
Джон Харроп

Відповіді:


60

Почніть з того, чому має значення функціональне програмування . Потім перейдіть до розділу «Навіщо питання програмування функцій» . Кілька куль:

  • Функціональне програмування дозволяє міркувати про проблеми по-різному
  • Функціональна абстракція є дуже потужною і дозволяє сушити код способами, недоступними для інших парадигм
  • У нашому багатоядерному майбутньому функціональні мови можуть бути простішими розділитись на одночасні завдання (хоча не суворо функціональні мови теж важко працюють над проблемою).
  • Простіше довести, що програми, написані на чистих функціональних мовах (без побічних ефектів), математично правильні.

5
+1 - Це все прекрасні моменти, і вони пояснюються як більш стисло, так і з більш точними деталями, ніж те, що я намагався зробити.
jmort253

1
З вашої четвертої точкою, так ви маєте в виду мови може бути доведений правильно, або програми написані на мові? У будь-якому випадку, як нечисті мови, так і програми, написані нечистими мовами, можна довести правильність, це просто набагато складніше та гнучкіше.
Йорг W Міттаг

1
@ Йорг W Міттаг, набагато простіше міркувати про властивості самої мови. Денотаційна семантика тривіальна для функціональних мов, і досить складна для імперативу.
SK-логіка

смішно, як друге посилання надає деякі "явні" аргументи, знаючи, що я навіть не читаю 1-го посилання.
jokoon

+1: Чудова відповідь. Мені особливо подобається, як ви ставите пункти №1 та №2 на словах.
Джим Г.

9

Концепції функціонального програмування створюють фундамент, який змінить спосіб вашої думки та допоможе вирішити реальні проблеми у світі.

Концепція схожа на те, чому всі ми вивчаємо багатозмінний обчислення, алгебру та / або інженерну фізику як спеціальності з інформатики, хоча нам, можливо, ніколи не потрібні ці конкретні знання в нашій кар'єрі.

Ось чому юридичні школи люблять кандидатів, які мають ступінь бакалавра математики. Вивчення математики вчить мислити про декілька понять логічно, а функціональне програмування вчить абстрагуванням та багатьом іншим важливим поняттям, які допомагають розбити проблеми та подивитися на них в іншому світлі.

Підсумовуючи це, функціональне програмування допомагає навчити вас вчитися.


Можливо, тоді йому справді не потрібно імені? Це не просто "правильний" дизайн програми?

4

Коли ви починаєте, функціональне програмування - найкраща модель мислення. Тому що для більшості ваших програм не потрібна орієнтація на об'єкти. Принаймні, це був мій досвід.

Однак тепер, коли я потрапляю в деякі додатки, які вимагають розділення дисплея та логіки, саме тоді я почав розділяти всю логіку та код відображення, щоб полегшити кожному робити те, що найкраще.

Але ви не знатимете, навіщо це робити, якщо спочатку не освоїте функціонал. Мені ніколи не сподобалося, як люди, котрі відбивають мене від мене, або що ОО є рішенням для всього. Просто переконайтесь, що який би підхід ви не використовували, це має сенс для того, над чим ви працюєте, і не надто крута крива навчання, щоб забрати занадто багато часу від роботи, за яку ви платите.


1
+1 - Мені подобається, що ти вказуєш на використання найкращої техніки для роботи: Переконайся, що це має сенс.
jmort253

1
На жаль, здоровий глузд є рідкісним у нашій галузі. Оскільки у кожного з нас є абсолютно різні переживання, які через помилки, які ми робимо, різні, кожен з нас розвиває різні звички, і чому ми їх робимо ... Такий, як адаптація контролю джерел, не має сенсу для тих, хто завжди працював себе.
crosenblum

"Здоровий глузд - це найбільш справедлива річ у світі, бо кожен думає, що він настільки добре наділений цим, що навіть тим, кому найважче задовольнитись у всіх інших питаннях, не властиво більше бажати цього, ніж вони вже є ». - Декарт

3

Тому що він підкреслює дієслова, а не іменники. Іноді значення мають дієслова.


ООП підкреслює іменники. Іноді значення мають іменники. Як ми можемо знати, які? - Хибна дилема. Система

3

Тому що в цілому він використовує менше коду для виконання того ж завдання. Чим менше код для запису, тим менше код для підтримки. Окрім того, що має менше коду, він також має менший стан, а тому міркувати про нього трохи простіше (як тільки ви звикли до цього).


Отже, чи не просто це визначення «краще»? Чому ми хотіли б робити щось, крім того, що ви описали?

2

Можливо, тому, що університети хочуть навчити чомусь із усіх парадигм програмування, а для певних речей функціональне програмування краще (як опис руху ігрових персонажів та опис анімації)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.