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