Нещодавно я вчився F # для розваги (я VB.NET/C# dev), і мені дуже подобається щось із того, що він може запропонувати. Теоретично це так. Але у мене виникають труднощі при розробці сценаріїв, де я б вирішив кодувати в F #, а не в C #. Будь-які ідеї?
Нещодавно я вчився F # для розваги (я VB.NET/C# dev), і мені дуже подобається щось із того, що він може запропонувати. Теоретично це так. Але у мене виникають труднощі при розробці сценаріїв, де я б вирішив кодувати в F #, а не в C #. Будь-які ідеї?
Відповіді:
Кілька аргументів для чистого функціонального програмування:
Для повного лікування див. Чому важливі питання функціонального програмування та чому значення функціонального програмування .
У мене виникають труднощі при розробці сценаріїв, де я б вирішив кодувати в F #, а не в C #. Будь-які ідеї?
Від сюди :
Асинхронні сервери
Метапрограмування (наприклад, розбір)
Технічні обчислення
GUI-програми
Логічне програмування
Тестування
Продуктивність
inline
для безоплатної абстракції вищого порядку.Ось для чого використовується функціональне програмування стилю - на більш-менш щоденній основі.
Ми робимо багато статистичних та актуарних речей з досить великими наборами даних. Дані, отримані з бази даних, - це по суті статичні, незмінні об'єкти. Немає підстав для створення класу методами.
Кожен етап обчислення додає деякі додаткові деталі, але по суті не мутує об'єкт. На кінці трубопроводу ми дійсно робимо фантастичне скорочення для обчислення сум і підрахунків та інших речей.
Уявіть це.
for data in summarize( enrich( calculate( some_query( criteria() ) ) ) ):
print data
Кожна "фаза" обчислення - це функціональний цикл програмування, який робить простим читання-обчислення-вихід і створює складений об'єкт інших речей плюс результати.
(Ми використовуємо Python, отже, функціональне програмування з використанням функцій генератора.)
Простіше використовувати об'єкти без громадянства, незмінні.
criteria() |> some_query |> calculate |> enrich |> summarize
Я вважаю, що оператор прямої труби може призвести до більш чіткого коду, але я відхиляюся.
map
щоб отримати той самий ефект.
Технічно це не унікальна властивість функціонального програмування, і F # не є чистою функціональною мовою. F #, як один із нащадків ML, забезпечує чудове узгодження шаблонів та алгебраїчні типи даних. Отже, для будь-якого завдання, яке вимагає складних структур даних, F # набагато виразніше і простіше у використанні, ніж C #.
Уявіть, що реалізувати компілятор у C # та F # - представляє абстрактне синтаксичне дерево та перетворювати його набагато простіше, якщо ваша мова надає ADT та узгодження шаблонів.
Якщо ви хочете повністю спробувати функціональність Haskell, у Erlang також є дуже цікаві речі.
Саймон Пейтон-Джонс сказав про Haskell, він хоче мати програму, яка, очевидно, не має помилок, а не має очевидних помилок.
(Мабуть, я трохи відкинув цитату, але ви розумієте)
Обмежуючи побічні ефекти, ви набагато простіше довести свій код правильним.
Однією з певних переваг є те, що він набагато легше паралелізується.
F#
не є повністю представником функціонального програмування. СпробуйтеClojure
замість цього.