Каковы преимущества функционального программирования?
Что вы думаете о преимуществах функционального программирования? И как они применяются к программистам сегодня?
Каковы наибольшие различия между функциональным программированием и ООП?
Ответы
Ответ 1
Стиль функционального программирования - это описание того, что вы хотите, а не как его получить. т.е.: вместо создания цикла for с переменной итератора и перехода через массив, выполняющий что-то в каждой ячейке, вы должны сказать, что эквивалент "эта метка относится к версии этого массива, где эта функция была выполнена на всех элементы".
Функциональное программирование перемещает в компилятор более основные идеи программирования, такие идеи, как понимание списков и кеширование.
Самое большое преимущество функционального программирования - краткость, потому что код может быть более кратким. Функциональная программа не создает переменную итератора как центр цикла, поэтому этот и другие виды накладных расходов исключаются из вашего кода.
Другим важным преимуществом является concurrency, что легче сделать с функциональным программированием, потому что компилятор выполняет большую часть операций, которые требовали ручной настройки переменных состояния (например, итератора в цикле).
Некоторые преимущества производительности можно увидеть и в контексте одного процессора, в зависимости от того, как написана программа, поскольку большинство функциональных языков и расширений поддерживают ленивую оценку. В Haskell вы можете сказать, что "эта метка представляет массив, содержащий все четные числа". Такой массив бесконечно велик, но вы можете запросить 100 000-й элемент этого массива в любой момент, не зная - при инициализации массива - именно то, что вам нужно, самое большое значение. Значение будет рассчитываться только тогда, когда оно вам понадобится, и не далее.
Ответ 2
Самое большое преимущество в том, что это не то, к чему вы привыкли. Выберите язык, например Scheme, и научитесь решать проблемы с ним, и вы станете лучшим программистом на уже знакомых вами языках. Это похоже на изучение второго человеческого языка. Вы предполагаете, что другие в основном вариации сами по себе, потому что вам не с чем сравнивать. Подверженность другим, особенно тем, которые не связаны с тем, что вы уже знаете, поучительна.
Ответ 3
Почему функциональное программирование имеет значение
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
Abstract
Поскольку программное обеспечение становится все более и более сложным, оно становится все более и более более важно структурировать это хорошо. Хорошо структурированное программное обеспечение легко писать и отлаживать, и предоставляет набор модулей, которые могут быть использованы повторно, чтобы уменьшить будущие затраты на программирование.
В этой статье мы показываем что две особенности функциональных языков, в частности, высшего порядка функции и ленивая оценка, может внести значительный вклад в модульность. В качестве примеров мы манипулируем списками и деревьями, программа несколько численных алгоритмов и реализовать эвристический альфа-бета (алгоритм из искусственного интеллекта, используемый в игре программы). Мы пришли к выводу, что, поскольку модульность является ключом к успешному программирование, функциональное программирование предлагает важные преимущества для разработка программного обеспечения.
Ответ 4
Хорошей отправной точкой было бы попытаться понять некоторые вещи, которые невозможны на императивных языках, но возможны на функциональных языках.
Если вы говорите об вычислимости, то, конечно, ничего не возможно в функциональном, но не императивном программировании (или наоборот).
Пункт различных парадигм программирования заключается не в том, чтобы сделать возможными вещи, которые раньше были невозможны, чтобы облегчить задачу, которая была тяжелой.
Функциональное программирование позволяет вам легче писать программы, которые являются краткими, без ошибок и параллелизуемыми.
Ответ 5
Он не обязательно должен быть одним или другим: использование языка, такого как С# 3.0, позволяет смешивать лучшие элементы каждого из них. OO может использоваться для крупномасштабной структуры на уровне класса и выше, Функциональный стиль для структуры малого масштаба на уровне метода.
Использование функционального стиля позволяет писать код, который четко заявляет о своем намерении, не смешиваясь с инструкциями потока управления и т.д. Из-за таких принципов, как бесплатное программирование с побочным эффектом, гораздо проще рассуждать о коде и проверьте его правильность.
Ответ 6
Я думаю, что наиболее практичным примером необходимости функционального программирования является concurrency - функциональные программы естественным образом надежны в потоковом режиме и, учитывая рост многоядерных аппаратных средств, это имеет первостепенное значение.
Функциональное программирование также увеличивает модульность - вы часто можете видеть, что методы/функции в императиве слишком длинны - вы почти никогда не увидите функцию больше, чем пару строк. И так как все развязано - повторное использование намного улучшилось, и модульное тестирование очень просто.
Ответ 7
Как только программа будет расти, количество команд в нашем словаре будет слишком высоким, что очень затруднит его использование. Именно здесь объектно-ориентированное программирование облегчает нашу жизнь, поскольку позволяет нам лучше организовывать наши команды.
Мы можем связать все команды, которые связаны с клиентом с каким-то объектом клиента (классом), что делает описание более понятным. Тем не менее, программа по-прежнему представляет собой последовательность команд, определяющую, как она должна действовать.
Функциональное программирование предоставляет совершенно другой способ расширения словарного запаса. Не ограничиваясь добавлением новых примитивных команд; мы также можем добавить новые структуры управления - примитивы, которые определяют, как мы можем создавать команды для создания программы. В императивных языках мы могли составлять команды в последовательности или с использованием ограниченного числа встроенных конструкций, таких как циклы, но если вы посмотрите на типичные программы, вы все равно увидите много повторяющихся структур; общие способы объединения команд
Ответ 8
Не думайте о функциональном программировании с точки зрения "необходимости". Вместо этого подумайте об этом как о другом методе программирования, который откроет ваш разум так же, как ООП, шаблоны, язык ассемблера и т.д., Возможно, полностью изменили ваш образ мышления, когда (если) вы их узнали. В конечном счете, обучение функциональному программированию сделает вас лучшим программистом.
Ответ 9
Если вы еще не знаете функциональное программирование, то его изучение даст вам больше возможностей для решения проблем.
FP - это простое обобщение, которое продвигает функции к значениям первого класса, тогда как ООП - для крупномасштабного структурирования кода. Однако существует некоторое перекрытие, где шаблоны проектирования ООП могут быть представлены непосредственно и гораздо более лаконично с использованием первоклассных функций.
Многие языки предоставляют как FP, так и OOP, включая OCaml, С# 3.0 и F #.
Cheers,
Джон Харроп.