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

StackOverflow https://stackoverflow.com/questions/128057

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Каковы наибольшие различия между функциональным программированием и ООП?

Это было полезно?

Решение

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

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

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

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

Некоторые преимущества в производительности можно увидеть и в контексте однопроцессорной системы, в зависимости от способа написания программы, поскольку большинство функциональных языков и расширений поддерживают отложенную оценку.В Haskell вы можете сказать: "эта метка представляет массив, содержащий все четные числа".Такой массив бесконечно велик, но вы можете запросить 100 000-й элемент этого массива в любой момент, не зная - во время инициализации массива - какое именно наибольшее значение вам понадобится.Значение будет рассчитано только тогда, когда вам это понадобится, и не более того.

Другие советы

Самое большое преимущество заключается в том, что это не то, к чему вы привыкли.Выберите язык, подобный Scheme, и научитесь решать проблемы с его помощью, и вы станете лучшим программистом на языках, которые вы уже знаете.Это все равно что изучать второй человеческий язык.Вы предполагаете, что другие - это, по сути, вариации на тему вас самих, потому что вам не с чем это сравнить.Знакомство с другими людьми, особенно с теми, которые не связаны с тем, что вы уже знаете, поучительно.

Почему Функциональное программирование важно
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

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

Если вы говорите о вычислимости, то, конечно, нет ничего возможного в функциональном, но не императивном программировании (или наоборот).

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

Функциональное программирование направлено на то, чтобы вам было легче писать программы, которые были бы краткими, без ошибок и распараллеливаемыми.

Это не обязательно должно быть то или другое:использование такого языка, как C # 3.0, позволяет вам сочетать лучшие элементы каждого из них.OO может использоваться для крупномасштабной структуры на уровне класса и выше, функциональный стиль - для мелкомасштабной структуры на уровне метода.

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

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

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

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

Функциональное программирование предоставляет совершенно другой способ расширения словарного запаса.Не ограничивается добавлением новых примитивных команд;мы также можем добавить новые управляющие структуры – примитивы, которые определяют, как мы можем объединять команды для создания программы.В императивных языках мы могли составлять команды последовательно или используя ограниченное количество встроенных конструкций, таких как циклы, но если вы посмотрите на типичные программы, вы все равно увидите много повторяющихся структур;распространенные способы объединения команд

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

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

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

Многие языки предоставляют как FP, так и ООП, включая OCaml, C # 3.0 и F #.

Ваше здоровье, Джон Харроп.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top