Змініть мій спосіб мислення під час підготовки до функціонального програмування


9

Переходячи до функціонального стилю програмування після приходу з процедурного та OOP, які речі мені потрібно знати заздалегідь про "цей новий спосіб мислення"?

Як ви підготуєтесь до дайвінгу у світі FP і вперше обійдетесь?

Які основи слід вивчити та встановити прямо?


2
Це занадто загально, імхо. Просто починайте читати! Більшість книг та посібників з функціонального програмування сьогодні починаються з відповідей на ваше запитання.
devmiles.com

Спробуйте, тоді опублікуйте питання, якщо ви зациклюєтесь на чомусь
Tom Squires

@ Володимир Володін: Це було б добре, але це не обов'язково для кожної книги. Чи можете ви порекомендувати якісь хороші (бажано, мовні агностики)?
JohnDoDo

Вам не доведеться пірнати . Ви можете спробувати лямбда-вираз мовою OOP, як c #, щоб згладити перехід від OOP до FP.
TomCaps

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

Відповіді:


10

Отримайте копію «Структура та інтерпретація комп’ютерних програм» та опрацюйте самостійно через перший розділ «Побудова абстракцій з процедурами». Найкраще знайомство з функціональним програмуванням, яке я коли-небудь мав.

EDIT: Якщо ви хочете чогось більш порівняльного, спробуйте "Сім мов за сім тижнів" (відмова від відповідальності: ця книга все ще є в моєму списку TODO).


6

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


4

Ви поставили віз перед конем. Не потрібно готуватися. Просто виберіть мову, яка виглядає цікавою, знайдіть документацію та спробуйте її. Якщо ви застрягли, то зупиніться і шукайте відповідь. У міру просування ваш спосіб мислення буде змінюватися.


3

ПП базується на обчисленні ламбби. Вам потрібно це знати. Це хороша відправна точка. Функції - це все. Немає поняття держави (хоча ви можете підробити це на більш високому рівні).

В ООП

a = 1 a = a + 1

приймається. У ФП не так. Ви просто не можете призначити змінній інше значення. Якщо ви хочете навчитися FP довгостроково, вивчіть Haskell. Це найчистіша версія FP там і її досить складна (я тільки почав її вивчати), але все-таки варто її вивчити.

Вступ до функціонального програмування дає вам високий рівень огляду того, що таке FP.

Два застереження, хоча

  1. Якщо ви хочете навчитися FP для роботи, то вакансій там не надто багато. Процедурні та ООП досі регулюють ринок праці. Але FP може вам дуже допомогти у вивченні нових способів вирішення проблеми.
  2. Компілятори FP не дуже швидко. Оскільки FP більше стосується вирішення проблеми, ви не можете очікувати швидкості C. Але все ж ви можете дати інструкції компілятору (в Haskell), щоб прискорити процес виконання. Компроміс полягає в тому, що ви отримуєте багато часу, зосереджуючись на програмі в руці, а не на помилках протипожежних.

8
"ПП заснована на обчисленні ламбби. Вам потрібно це знати." Ні, ви цього не робите. Знання обчислення лямбда не потрібно для розуміння функціонального програмування більше, ніж знання машин Тьюрінга (або складання) необхідно для розуміння необхідного програмування.
sepp2k

@ sepp2k Щоб досягти успіху в FP з довгостроковою метою, я, чесно кажучи, вважаю, що вивчення обчислення лямбда необхідно. Ви можете дізнатися це без обчислення лямбда, але навчившись це зробить вас краще на FP.
Ubermensch

2
FP certianly має констатувати, що саме такий стан зазвичай незмінний, також не впевнений, що я згоден із твердженням про компілятори повільним
jk.

@jk. Безумовно, у них є стан, але не це в OO (держави можуть бути включені у функції або як відповідні шаблони і більш тонкими способами). А незмінне стан означає, що у вас є лише одна держава. Ось чому функція завжди повинна повертати однакове значення. Щодо компіляторів, я не думаю, що вони можуть відповідати C / C ++ за чистою швидкістю, оскільки компілятор піклується про кроки, необхідні для обчислення результату, замість того, щоб ми вказували порядок. FP має найбільшу перевагу в зниженні витрат розробника та паралельних обчисленнях, а не чистої швидкості процесора.
Ubermensch

3

Я намагаюся пам'ятати таку мантру:

Дані в -> Перетворення даних -> Вихід з даних

або

TransformData (Data In) -> Вихід даних


1
Це має бути TransformData (DataIn) -> DataOut
Ubermensch

:) як матра "Data In, Transform Data, Data Out" простіше сказати "TransformData, Open Bracket, Data In, Close Bracket, Data Out" Я лише жартую, що згоден з вами.
Темна ніч

Це просто доброзичливий товариш по коментарям. Дякуємо за відповідь.
Ubermensch

Я знаю, я просто жартував з вами, без образи, насправді я думаю, що я оновлю свою матуру.
Темна ніч

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