Что такое функциональное программирование? Учебник с примером

Что такое функциональное программирование?

Функциональное программирование (также называемое ФП) — это способ создания программного обеспечения путем создания чистых функций. Он позволяет избежать концепций общего состояния и изменяемых данных, наблюдаемых в объектно-ориентированном программировании.

Функциональные языки ориентированы на выражения и объявления, а не на выполнение операторов. Следовательно, в отличие от других процедур, которые зависят от локального или глобального состояния, вывод значения в FP зависит только от аргументов, переданных функции.

Характеристики функционального программирования

  • Метод функционального программирования фокусируется на результатах, а не на процессе.
  • Акцент делается на том, что нужно вычислить.
  • Данные неизменяемы
  • Функциональное программирование. Разложите задачу на функции.
  • Он построен на концепции математических функций, которые используют условные выражения и рекурсию для выполнения вычислений.
  • Он не поддерживает итерации, такие как операторы цикла, и условные операторы, такие как If-Else.

История функционального программирования

  • Основой функционального программирования является лямбда-исчисление. Он был разработан в 1930-х годах для функционального применения, определения и рекурсии.
  • LISP был первым функциональным языком программирования. Маккарти спроектировал его в 1960 году.
  • В конце 70-х годов исследователи из Эдинбургского университета определили ML (метаязык).
  • В начале 80-х в язык Hope добавлены алгебраические типы данных для рекурсии и уравнений.
  • В 2004 году появилась инновация функционального языка Scala.

Функциональные языки программирования

Целью любого языка ФП является имитация математических функций. Однако в функциональном программировании основной процесс вычислений отличается.

Вот некоторые наиболее известные языки функционального программирования:

  • Haskell
  • SML
  • Clojure
  • масштаб
  • Erlang
  • Чистка
  • F#
  • ML/OCaml Lisp/Схема
  • XSLT
  • SQL
  • Mathematica

Базовая терминология функционального программирования и Concepts

Базовая терминология функционального программирования и Concepts

Неизменяемые данные

Неизменяемые данные означают, что вы сможете легко создавать структуры данных вместо изменения уже существующих.

Ссылочная прозрачность

Функциональные программы должны выполнять операции так, как будто это происходит в первый раз. Таким образом, вы будете знать, что могло или не могло произойти во время выполнения программы, а также ее побочные эффекты. В терминах FP это называется ссылочной прозрачностью.

модульность

Модульная конструкция повышает производительность. Небольшие модули можно быстро кодировать и имеют больше шансов на повторное использование, что, несомненно, приводит к более быстрой разработке программ. Кроме того, модули можно тестировать отдельно, что помогает сократить время, затрачиваемое на модульное тестирование и отладку.

Ремонтопригодность

Ремонтопригодность — это простой термин, который означает, что программирование FP легче поддерживать, поскольку вам не нужно беспокоиться о случайном изменении чего-либо за пределами данной функции.

Первоклассная функция

«Первоклассная функция» — это определение, приписываемое объектам языка программирования, которые не имеют ограничений на их использование. Следовательно, первоклассные функции могут появляться в любом месте программы.

Закрытие

Замыкание — это внутренняя функция, которая может обращаться к переменным родительской функции даже после выполнения родительской функции.

Функции высшего порядка

Функции высшего порядка либо принимают другие функции в качестве аргументов, либо возвращают их как результаты.

Функции высшего порядка допускают частичное применение или каррирование. Этот метод применяет функцию к ее аргументам по одному, поскольку каждое приложение возвращает новую функцию, которая принимает следующий аргумент.

Чистая функция

«Чистая функция» — это функция, входные данные которой объявлены как входные, и ни один из них не должен быть скрыт. Выходы также объявляются как выходы.

Чистые функции действуют на свои параметры. Это неэффективно, если ничего не возвращает. Более того, он предлагает тот же результат для заданных параметров.

Это критически важно для анализа и выбора наиболее эффективных ключевых слов для улучшения рейтинга вашего сайта.

Function Pure(a,b)
{
	return a+b;
}

Нечистые функции

Нечистое действует прямо противоположно чистому. У них есть скрытые входы или выходы; это называется нечистым. Нечистые функции нельзя использовать или тестировать изолированно, поскольку они имеют зависимости.

Пример

int z;
function notPure(){
	z = z+10;
}

Состав функций

Композиция функций — это объединение двух или более функций в одну.

Общие состояния

Общие состояния — важная концепция в ООП-программировании. По сути, это добавление свойств к объектам. Например, если жесткий диск является объектом, в качестве свойств можно добавить емкость хранилища и размер диска.

Побочные эффекты

Побочные эффекты — это любые изменения состояния, происходящие вне вызываемой функции. Самая большая цель любого языка программирования FP — свести к минимуму побочные эффекты, отделив их от остального программного кода. В программировании FP жизненно важно убрать побочные эффекты из остальной части вашей программной логики.

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

  • Позволяет избежать запутанных проблем и ошибок в коде.
  • Легче тестировать и выполнять модульное тестирование и отлаживать код FP.
  • Параллельная обработка и параллелизм
  • Развертывание горячего кода и отказоустойчивость
  • Предлагает лучшую модульность с более коротким кодом.
  • Повышенная продуктивность разработчика
  • Поддерживает вложенные функции
  • Функциональные конструкции, такие как ленивые карты и списки и т. д.
  • Позволяет эффективно использовать лямбда-исчисление.

Ограничения функционального программирования

  • Парадигма функционального программирования непроста, поэтому ее сложно понять новичку.
  • Трудно поддерживать, так как многие объекты развиваются во время кодирования.
  • Требуется много насмешек и обширная настройка окружения.
  • Повторное использование очень сложно и требует постоянного рефакторинга.
  • Объекты могут неправильно отображать проблему.

Функциональное программирование против объектно-ориентированного программирования

Функциональное программирование ООП
FP использует неизменяемые данные. ООП использует изменяемые данные.
Следует модели, основанной на декларативном программировании. Следует модели императивного программирования.
Основное внимание в нем уделяется: «То, что вы делаете. в программе». Основное внимание в нем уделяется тому, «Как вы программируете».
Поддерживает параллельное программирование. Нет поддержки параллельного программирования.
Его функции не имеют побочных эффектов. Метод может вызвать множество побочных эффектов.
Управление потоком осуществляется с помощью вызовов функций и вызовов функций с рекурсией. Процесс управления потоком осуществляется с использованием циклов и условных операторов.
Порядок выполнения операторов не очень важен. Порядок выполнения операторов важен.
Поддерживает как «Абстракцию над данными», так и «Абстракцию над поведением». Поддерживает только «Абстракцию над данными».

Заключение

  • Функциональное программирование или FP — это способ мышления о создании программного обеспечения, основанный на некоторых фундаментальных определяющих принципах.
  • Концепции функционального программирования фокусируются на результатах, а не на процессе.
  • Целью любого языка ФП является имитация математических функций.
  • Некоторые наиболее известные языки функционального программирования: 1) Haskell 2) SM 3) Clojure 4) Scala 5) Erlang 6) Clean
  • «Чистая функция» — это функция, входные данные которой объявлены как входные, и ни один из них не должен быть скрыт. Выходы также объявляются как выходы.
  • Неизменяемые данные означают, что вы можете легко создавать структуры данных вместо изменения уже существующих.
  • Позволяет избежать запутанных проблем и ошибок в коде.
  • Функциональный код непростой, поэтому его сложно понять новичку.
  • FP использует неизменяемые данные, а ООП использует изменяемые данные.