Почему функциональное программирование


38

Как обстоят дела с функциональным программированием? Я часто говорю об этом, но, честно говоря, я никогда не находил их вообще полезными. Почему так много университетов, очевидно, учат их?


6
Очень большой в программировании ИИ.
аква

3
@aqua - разве это не ответ, почему бы и нет?
Мартин Беккет

5
Я также хотел бы отметить, что даже традиционные ОО-языки начинают включать концепции из функционального программирования. Linq (в .NET), как наглядный пример.
apoorv020

Я думаю, что функциональное программирование тренирует ваш мозг больше и может привести к действительно содержательному коду. Так что это круто.
Адель

2
@ apoorv020: И дженерики, кортежи, сборка мусора и ... все они созданы на функциональных языках.
Джон Харроп

Ответы:


60

Начните с того, почему функциональное программирование имеет значение . Затем перейдите к разделу «Почему, почему функциональное программирование имеет значение» . Несколько пуль:

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

5
+1 - это все отличные моменты, и они объясняются как более кратко и более точно, чем то, что я пытался сделать.
jmort253

1
В четвертом пункте вы имели в виду, что язык может быть проверен или программы написаны на этом языке? В любом случае, как нечистые языки, так и программы, написанные на нечистых языках, могут быть проверены на правильность, это намного сложнее и сложнее.
Йорг W Mittag

1
@ Jörg W Mittag, гораздо проще рассуждать о свойствах самого языка. Денотационная семантика тривиальна для функциональных языков и довольно сложна для императива.
SK-logic

Забавно, что вторая ссылка предоставляет некоторые «явные» аргументы, зная, что я даже не прочитал 1-ю ссылку.
Jokoon

+1: отличный ответ. Мне особенно нравится, как вы ставите точки пул № 1 и № 2 в слова.
Джим Г.

9

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

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

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

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


Может быть, тогда имя не нужно? Разве это не просто «правильный» дизайн программы?

4

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

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

Но вы не будете знать, зачем это делать, если сначала не освоите Functional. Мне никогда не нравилось, когда люди бросают в меня OO, или что OO - решение для всего. Просто убедитесь, что какой бы подход вы ни использовали, он имеет смысл для того, над чем вы работаете, и не слишком крутой курс обучения, чтобы отнимать слишком много времени от работы, за которую вам платят.


1
+1 - Мне нравится, что вы указываете, используя лучшую технику для работы: убедитесь, что она имеет смысл.
jmort253

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

«Здравый смысл - это наиболее справедливо распределенная вещь в мире, поскольку каждый думает, что он наделен этим настолько, что даже те, кого труднее всего удовлетворить во всех других вопросах, не имеют привычки желать большего, чем они уже имеют." - Декарт

3

Потому что это подчеркивает глаголы, а не существительные. Иногда глаголы имеют значение.


ООП подчеркивает существительные. Иногда важны существительные. Как мы узнаем что? - Ложная дилемма. Система остановлена

3

Потому что в целом он использует меньше кода для выполнения той же задачи. Меньше кода для написания, меньше кода для обслуживания. Помимо того, что в нем меньше кода, он также имеет меньшее состояние, и, следовательно, его немного проще рассуждать (как только вы к нему привыкли).


Итак, разве это не просто определение «лучше»? Почему мы хотим делать что-то кроме того, что вы описали?

2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.