Позвольте мне повторить ответ, который я дал на одном из обсуждений в группе функционального программирования в Бангалоре:
Функциональная программа состоит только из функций. Функции вычисляют
значения из их входов. Мы можем противопоставить это императиву
программирование, где по мере выполнения программы значения изменяемых
места меняются. Другими словами, в C или Java переменная с именем X
относится к местоположению, значение которого изменяется. Но в функционале
Программирование X - это имя значения (а не местоположения). Где бы то ни было
X находится в области видимости, он имеет то же значение (т. Е.
прозрачный). В FP функции также являются значениями. Они могут быть переданы как
аргументы для других функций. Это известно как функционал высшего порядка
программирование. Функции высшего порядка позволяют нам моделировать удивительное разнообразие
узоры. Например, посмотрите на функцию map в Lisp. Это
представляет шаблон, в котором программист должен сделать что-то
каждый элемент списка. Это «что-то» закодировано как функция и
передан в качестве аргумента на карту.
Как мы видели, наиболее заметная особенность FP - это побочный эффект
свободность. Если функция делает что-то большее, чем вычисление значения
от его ввода, то это вызывает побочный эффект. Такие функции
не допускается в чистом ФП. Легко протестировать функции без побочных эффектов.
Не существует глобального состояния для настройки перед запуском теста и
нет глобального состояния для проверки после запуска теста. Каждая функция может
быть проверены независимо, просто предоставив свой вклад и изучив
возвращаемое значение Это облегчает написание автоматизированных тестов. Другая
Преимущество свободы от побочных эффектов в том, что она дает вам лучший контроль
на параллелизме.
Многие языки FP правильно обрабатывают рекурсию и итерацию. Они делают это путем
поддерживая то, что называется хвостовой рекурсией. Что такое хвостовая рекурсия?
если функция вызывает себя, и это последнее, что она делает, она
удаляет текущий кадр стека сразу. Другими словами, если
функция вызывает себя хвост-рекурсивно 1000 раз, она не растет
стек глубиной 1000. Это делает специальные циклические конструкции
не нужно в этих языках.
Лямбда-исчисление является наиболее упрощенной версией языка FP.
Языки FP более высокого уровня, такие как Haskell, компилируются в Lambda
Исчисление. У этого есть только три синтаксических конструкции, но все же это
достаточно выразительным, чтобы представить любую абстракцию или алгоритм.
Мое мнение таково, что FP следует рассматривать как мета-парадигму. Мы можем
писать программы в любом стиле, в том числе ООП, используя простые
функциональные абстракции, предоставляемые лямбда-исчислением.
Спасибо,
- Виджай
Оригинальная ссылка для обсуждения: http://groups.google.co.in/group/bangalore-fp/browse_thread/thread/4c2cfa7985d7eab3