Может ли F # научить меня хорошим методам функционального программирования? - PullRequest
8 голосов
/ 22 ноября 2010

Я планирую погрузиться в парадигму функционального программирования и сделать мыслительный процесс второй натурой для меня..Net / Mono - единственная модель фреймворка / объекта, с которой я знаком, и я не хочу изучать какую-либо другую систему типов.Это делает F # очевидным соображением, так как бремя изучения новой системы типов не будет отвлекающим фактором.

Но я беспокоюсь о самом языке.Будет ли он так же хорош, как любой другой классический функциональный язык программирования (например, Haskell) для сверления FP в моем черепе?

Ответы [ 5 ]

10 голосов
/ 22 ноября 2010

Да, это возможно.Особенно полезно и уместно здесь Функциональное программирование в реальном мире , которое приходит в FP как с C #, так и с точки зрения F #.Тебе это понравится.

9 голосов
/ 22 ноября 2010

Я думаю, что выгода от изучения функционального программирования на F # (особенно если у вас уже есть опыт работы с C # и .NET) заключается в том, что вам будет гораздо проще создать интересный проект.

  • Одна из причин в том, что вы уже знакомы с библиотеками .NET (к которым легко получить доступ из F #)
  • Вторая причина в том, что F # не является чистым, поэтому вы можете начать писать работающий код, а затем улучшить его, чтобы сделать его более функциональным.

F # поддерживает несколько парадигм, но в основном это функциональный язык (по сравнению с Python или C #, которые также поддерживают несколько парадигм, но не являются в основном функциональными). Это позволяет заставить себя использовать функциональный стиль. Императивных шаблонов легче избежать, потому что их сложнее писать на F # (а код выглядит хуже).

Я думаю, что как только вы "освоите" основы функционального программирования, вам будет легче изучать другие функциональные языки, если вам все еще будет интересно. Определенно приятно немного узнать о Хаскеле или Схеме, потому что они более радикальны (в некоторых отношениях).

Если вы хорошо понимаете понятия, не используя их в реальных проектах, то хорошим вариантом может быть также начать с классического языка, используя классическую книгу (например, Школа выражений Haskell или * 1015). * Структура и интерпретация компьютерных программ ). Я не имею в виду это ни в каком отрицательном смысле - мне лично очень нравится читать технические книги, не пытаясь привести примеры, потому что я все еще могу взять интересные концепции из простого чтения (а для практики всегда есть Google). Конечно, вы можете написать некоторый код на Haskell или Scheme, но как программист .NET вы, вероятно, найдете написание кода F # более увлекательным ...

4 голосов
/ 22 ноября 2010

Да, это определенно поможет вам изучить функциональное программирование. F # также поддерживает объектно-ориентированное программирование, поэтому переключение должно быть проще. Если вы хотите перейти к полнофункциональному языку в конечном итоге, вы могли бы, но на самом деле я нахожу комбинацию ОО и ФП лучше, чем только ОО или ФП (я программист Scala, как F #).

3 голосов
/ 23 ноября 2010

F # во многих отношениях может быть лучше, чем большинство «других классических функциональных языков программирования». Поскольку вы уже знаете .NET, вы сможете полностью использовать все свои знания .NET, взяв две полезные вещи из F #:

  1. Парадигма функционального программирования. То есть как программировать в стиле FP. Вы можете использовать это на любом языке. Я часто изучаю FP в своем коде на C #, потому что считаю, что это гораздо более удобный и многократно используемый способ написания программного обеспечения.

  2. Синтаксис функционального программирования на одном языке. F # очень похож на OCAML, а семейство ML составляет один из трех основных диалектов языков FP. Двумя другими важными вещами являются семья Миранды (основным представителем которой является Хаскелл) и семья LISP (где Common Lisp и Scheme - два больших представителя).

В F # это может помочь вам очень четко различать типы F # и типы .NET. Записи, кортежи и дискриминированные союзы (в значительной степени) являются чисто F # вещами и используются почти во всех функциональных языках. Используйте их много, если вы хотите изучить FP. Классы, структуры и интерфейсы также присутствуют, но это концепции .NET. Используйте их по мере необходимости, но старайтесь избегать их в целом, чтобы в итоге вы не написали «C # с глупым синтаксисом» вместо идиоматического F #.

В Haskell вы действительно упустите из виду истинную чистоту (да, не такая уж большая проблема), ленивая оценка по умолчанию (большое изменение) и классы типов. Вы можете сделать lazy eval в F #, но вы должны использовать явные классы Lazy <>, чтобы получить его. Повсюду ленивый eval - одна из действительно уникальных и мощных вещей в Haskell, но это не строгая концепция FP. Классы типов очень мощные, но вы можете обойтись без них в большинстве реальных ситуаций. Это просто более высокий уровень абстракции, который сокращает количество котлов и повторений.

Истинная чистота обычно более академична. У него есть определенные преимущества, но если вы уже привыкли к .NET и нечистым методам, вам, скорее всего, будет просто обходиться, пока вы полностью не погрузитесь в образ мышления FP.

2 голосов
/ 22 ноября 2010

Парадигма функционального программирования? Haskell приходит на ум сразу. Кстати, в Haskell нет наследуемой framework . Насколько я знаю, ваш framework - это окно терминала и редактор программ.

Если вам нужен функциональный язык программирования, который есть в вашей среде .NET, вам придется придерживаться F #.

IronPython, но, кстати, не является функциональным языком программирования.

...