Когда использовать язык функционального программирования?

В которых ситуациях я должен принять решение использовать язык функционального программирования по более подробному объектно-ориентированному языку как C++, C# или Java?

Я понимаю, каково функциональное программирование, что я действительно не понимаю, для того, какие типы проблем это - идеальное решение?

81
задан Santosh Kumar 26 August 2019 в 13:26
поделиться

8 ответов

Функциональные языки, по-моему, хороши для главным образом двух вещей: Игровой AIS и математические вычисления. Это хорошо в игровом AIS из-за его хороших манипуляций списком (по крайней мере, в Lisp и Схеме), и для математических вычислений из-за ее синтаксиса. У схемы, Lisp и Haskell есть синтаксис, который делает математические вычисления легкими читать. Последняя вещь, которую я должен добавить, состоит в том, что функциональные языки являются действительно забавными языками. Мой курс Схемы был одним из курсов, с которыми у меня было самое забавное.

48
ответ дан honk 24 November 2019 в 09:35
поделиться

Я провел некоторое исследование в это сам и думал, что мог бы добавить ПАРАЛЛЕЛИЗМ к списку причин использовать функциональный язык. Посмотрите в какой-то момент в скорости процессора ближайшего будущего, не будет в состоянии увеличить использование той же технологии CPU. Физика архитектуры не позволит его.

Так, чтобы был то, где параллельная обработка входит.

, К сожалению, большинство языков ООП не может использовать в своих интересах несколько процессоров сразу из-за взаимозависимостей между данными.

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

Вот превосходная статья о функциональном программировании, которым можно наслаждаться.

88
ответ дан Alex Baranosky 24 November 2019 в 09:35
поделиться

Мой друг заключил одному в кавычки из его преподавателей вуза что что-то как следующее:

Тянут сетку с типами данных через вершину и операции на тех типах данных вниз левая сторона. При разрезании сетки вертикально Вы делаете OO; при разрезании сетки горизонтально Вы делаете FP.

Мой ответ - то, что FP является абсолютно жизнеспособным подходом к программированию со столь же широкой областью применения как OO. Как с любым обсуждением выбора языка программирования, я думаю, что более важные вопросы:

  1. у Вас есть время для инвестирования в изучение новой нотации и нового образа мыслей?
  2. , Какой из языков Вы рассматриваете, имеют достаточно богатые библиотеки, что Вы не застрянете, перестраивая некоторое колесо?

относительно первого вопроса, если бы Вы делаете это, прежде всего, для значения изучения, я предложил бы смотреть Haskell, из-за широкого спектра материалов поддержки (книги, статьи, активное сообщество, и т.д.)

относительно второго вопроса, у Haskell есть хороший диапазон библиотек (хотя некоторые более зрелы, чем другие), но Scala (гибридный функциональный OO язык, работающий на JVM), имеет преимущества, что можно более постепенно переходить в функциональный стиль, и Вы имеете полный спектр в наличии доступных для Java библиотек Вам.

13
ответ дан joel.neely 24 November 2019 в 09:35
поделиться

Практически все, что можно сделать в PP, может быть сделано в FP и том же самом наоборот. Это - просто другой способ кодировать something— другой взгляд на проблему и различный способ решить его.

Однако, потому что не многие люди используют FP, проблема больше об отсутствии хороших библиотек, мобильность/пригодность для обслуживания (так как у специалиста по обслуживанию есть лучший шанс понять что-то записанное в C++, чем Схема), и отсутствие документации и сообщества. Я знаю, что СУЩЕСТВУЮТ некоторые документы, однако, сравните это с C++, C# или Java, и Вы поймете то, что я имею в виду.

Однако, если Вы действительно хотите сделать FP, можно использовать этот стиль даже в C++ и C#. Конечно, это не будут 100% FP, если Вы будете пользоваться стандартной библиотекой. К сожалению, я не думаю, что C# оптимизирован, чтобы использоваться с функциональным программированием, и это, вероятно, создаст партию проблем производительности.

Это - больше субъективное сообщение, что я думаю о FP. Это не строгое объявление.

9
ответ дан ErikE 24 November 2019 в 09:35
поделиться

Функциональные языки хороши в большом количестве ситуаций. Это зависит от библиотек конкретного функционального языка.

, Как Вы ответили бы на вопрос, "Когда использовать объектно-ориентированный язык программирования?"?

4
ответ дан Jules 24 November 2019 в 09:35
поделиться

Хотя это - вполне субъективный вопрос, я был бы точно так же, как, чтобы добавить, что функциональные языки используются много для парсинга предметно-ориентированные языки ; функциональная природа предоставляет хорошо парсингу грамматик.

3
ответ дан csl 24 November 2019 в 09:35
поделиться

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

1
ответ дан T.E.D. 24 November 2019 в 09:35
поделиться

В целом используйте язык, на котором является самым легким выразить решение проблемы. Для функционального программирования это - когда решение проблемы легко выражается с точки зрения функции , отсюда имя. Обычно это хорошо для математических операций, AI, сопоставления с образцом; в целом что-либо, что может быть разломано на ряд правил, который должен быть применен для получения ответа. Можно только действительно определить "лучший" язык для использования после анализа проблемы достаточно. Это - то, где псевдокод пригождается. Если Вы пишете псевдокод, который похож на FP, используйте FP.

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

Примечание также, что возможно подражать FP в языках OO через умно разработанные API. Например, я видел многочисленные библиотеки Java (JMock является одним примером), что объединение в цепочку метода использования для моделирования FP DSL. Тогда Вы будете видеть конструкции, такие как:

logger.expects(once()).method("error") .with( and(stringContains(action),stringContains(cause)) );

Это по существу создает функцию, которая оценена, чтобы определить, корректна ли некоторая вызывающая последовательность на фиктивном объекте. (пример, украденный от http://www.jmock.org/yoga.html )

Другой подобный FP синтаксис на иначе языках OO является использованием закрытий, такой как в Ruby.

1
ответ дан Phil 24 November 2019 в 09:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: