В каких ситуациях я должен выбрать использование функционального языка программирования вместо более подробного объектно-ориентированного языка, такого как C ++, C # или Java?
Я понимаю, что такое функциональное программирование, но на самом деле не понимаю, для каких типов проблем это идеальное решение?
functional-programming
language-agnostic
Алексей Бараноски
источник
источник
Ответы:
На мой взгляд, функциональные языки хороши в основном для двух вещей: игрового ИИ и математических вычислений. Он хорош в игровых ИИ из-за хороших манипуляций со списками (по крайней мере, в Lisp и Scheme), и для математических вычислений из-за его синтаксиса. Scheme, Lisp и Haskell имеют синтаксис, упрощающий чтение математических вычислений. Последнее, что я должен добавить, это то, что функциональные языки - действительно забавные языки. Мой курс Scheme был одним из тех, от которых мне было больше всего весело.
источник
Я сам провел небольшое исследование в этой области и подумал, что могу добавить CONCURRENCY в список причин для использования функционального языка. Видите ли, в какой-то момент в ближайшем будущем скорость процессора не сможет увеличиться с использованием той же технологии процессора. Физика архитектуры этого не позволяет.
Вот тут и появляется параллельная обработка.
К сожалению, большинство языков ООП не могут использовать преимущества нескольких процессоров одновременно из-за взаимозависимостей между данными.
В чистых языках функционального программирования компьютер может запускать две (или многие больше) функции одновременно, потому что эти функции не изменяют внешнюю информацию о состоянии.
Вот отличная статья о функциональном программировании, которая может вам понравиться.
источник
Один мой друг процитировал одного из профессоров его колледжа, который сказал примерно следующее:
Я отвечу, что FP - это вполне жизнеспособный подход к программированию с таким же широким спектром приложений, как объектно-ориентированный подход. Как и в случае любого обсуждения выбора языка программирования, я думаю, что наиболее важными вопросами являются:
Что касается первого вопроса, если вы делаете это в первую очередь для обучения, я бы посоветовал взглянуть на Haskell из-за большого количества вспомогательных материалов (книги, статьи, активное сообщество и т. Д.)
Что касается второго вопроса, то у Haskell есть хороший набор библиотек (хотя некоторые из них более зрелые, чем другие), но Scala (гибридный OO-функциональный язык, работающий на JVM) имеет преимущества, заключающиеся в том, что вы можете более постепенно переходить в функциональный стиль. , и у вас есть полный набор доступных для Java библиотек.
источник
Практически все, что вы можете сделать в PP, можно сделать в FP, и то же самое в обратном порядке. Это просто еще один способ что-то закодировать - другой взгляд на проблему и другой способ ее решения.
Однако, поскольку немногие люди используют FP, проблема больше связана с отсутствием хороших библиотек, переносимостью / ремонтопригодностью (поскольку у сопровождающего больше шансов понять что-то, написанное на C ++, чем на Scheme), а также в отсутствии документации и сообщества. Я знаю, что есть некоторые документы, однако сравните их с C ++, C # или Java, и вы поймете, о чем я.
Однако, если вы действительно хотите заниматься FP, вы можете использовать этот стиль даже в C ++ и C #. Конечно, если вы используете стандартную библиотеку, это не будет 100% FP. К сожалению, я не думаю, что C # оптимизирован для использования с функциональным программированием и, вероятно, создаст много проблем с производительностью.
То, что я думаю о FP, это скорее субъективный пост. Это не строгое заявление.
источник
Функциональные языки хороши во многих ситуациях. Это зависит от библиотек конкретного функционального языка.
Как бы вы ответили на вопрос «Когда использовать объектно-ориентированный язык программирования?»?
источник
Хотя это довольно субъективный вопрос, я просто хотел бы добавить, что функциональные языки часто используются для анализа языков, специфичных для предметной области ; функциональный характер хорошо подходит для синтаксического анализа грамматик.
источник
Судя по тому, что я видел, это скорее вопрос вкуса, чем функциональность (без каламбура). На самом деле ни в одном из стилей языка нет ничего, что делало бы его лучше или хуже при выполнении конкретных задач.
источник
В общем, используйте язык, на котором проще всего выразить решение проблемы. Для функционального программирования это когда решение проблемы легко выражается в терминах функций , отсюда и название. Обычно это хорошо для математических операций, AI, сопоставления с образцом; в общем, все, что можно разбить на набор правил, которые необходимо применить, чтобы получить ответ. Вы сможете определить «лучший» язык только после того, как тщательно проанализируете свою проблему. Вот здесь и пригодится псевдокод. Если вы обнаружите, что пишете псевдокод, похожий на FP, используйте FP.
Конечно, все полные языки программирования функционально эквивалентны, поэтому на самом деле не имеет значения, какой из них вы выберете с точки зрения того, какие проблемы вы можете решить. Основные эффекты будут заключаться в эффективности и точности кодирования, а также в простоте обслуживания.
Также обратите внимание, что можно имитировать FP на языках объектно-ориентированного программирования с помощью грамотно разработанных API. Например, я видел множество библиотек Java (JMock - один из примеров), которые используют цепочку методов для имитации FP DSL. Затем вы увидите такие конструкции, как:
logger.expects(once()).method("error") .with( and(stringContains(action),stringContains(cause)) );
По сути, это создает функцию, которая оценивается, чтобы определить, правильна ли некоторая последовательность вызовов для фиктивного объекта. (пример украден с http://www.jmock.org/yoga.html )
Другой похожий на FP синтаксис в других объектно-ориентированных языках - это использование замыканий, например, в Ruby.
источник
Я думаю, что предыдущие сообщения верны, вот краткий список, функциональное программирование - идеальное решение для следующего:
источник