Недавно я изучал F # для удовольствия (я - разработчик VB.NET/C#), и мне действительно нравится то, что он может предложить. Теоретически это так. Но мне трудно придумать сценарии, в которых я бы выбрал код на F #, а не на C #. Любые идеи?
Недавно я изучал F # для удовольствия (я - разработчик VB.NET/C#), и мне действительно нравится то, что он может предложить. Теоретически это так. Но мне трудно придумать сценарии, в которых я бы выбрал код на 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 также есть несколько очень интересных вещей.
Саймон Пэйтон-Джонс сказал о Хаскелле, он хочет иметь программу, в которой явно нет ошибок, а не очевидных ошибок.
(Я, вероятно, получил немного цитату, но вы поняли идею)
Ограничивая побочные эффекты, вы значительно облегчаете проверку правильности своего кода.
Одно определенное преимущество состоит в том, что это намного легче распараллелить
F#
не полностью отражает функциональное программирование. ПопробуйClojure
вместо этого.