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