Подтвердить что ты не робот

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

Что вы думаете о преимуществах функционального программирования? И как они применяются к программистам сегодня?

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

4b9b3361

Ответ 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, Джон Харроп.