Какво е функционално програмиране? Урок с пример

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

Функционалното програмиране (наричано също FP) е начин на мислене за изграждането на софтуер чрез създаване на чисти функции. Той избягва концепциите за споделено състояние, променливи данни, наблюдавани в обектно-ориентираното програмиране.

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

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

  • Методът на функционалното програмиране се фокусира върху резултатите, а не върху процеса
  • Акцентът е върху това, което трябва да се изчисли
  • Данните са неизменни
  • Функционално програмиране Разложете проблема на „функции“.
  • Той е изграден върху концепцията за математически функции, която използва условни изрази и рекурсия, за да извърши изчислението
  • Не поддържа итерации като оператори за цикъл и условни оператори като If-Else

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

  • Основата на функционалното програмиране е ламбда смятане. Разработен е през 1930-те години на миналия век за функционално приложение, дефиниция и рекурсия
  • LISP беше първият функционален език за програмиране. Маккарти го проектира през 1960 г
  • В края на 70-те изследователи от Университета в Единбург дефинираха ML (мета езика)
  • В началото на 80-те езикът Hope добавя алгебрични типове данни за рекурсия и уравнения
  • През 2004 г. Иновация на функционален език "Scala."

Езици за функционално програмиране

Целта на всеки FP език е да имитира математическите функции. Основният процес на изчисление обаче е различен във функционалното програмиране.

Ето някои от най-известните езици за функционално програмиране:

  • Haskell
  • ГСМ
  • Clojure
  • Scala
  • Ерланг
  • чист
  • 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;
}

Функция Състав

Функционалната композиция е комбиниране на 2 или повече функции за създаване на нова.

Споделени състояния

Споделените състояния са важна концепция в ООП програмирането. По принцип това е добавяне на свойства към обекти. Например, ако твърд диск е обект, капацитетът за съхранение и размерът на диска могат да бъдат добавени като свойства.

Странични ефекти

Страничните ефекти са всички промени в състоянието, които се случват извън извиканата функция. Най-голямата цел на всеки език за програмиране на FP е да минимизира страничните ефекти, като ги отделя от останалата част от софтуерния код. В FP програмирането е жизненоважно да премахнете страничните ефекти от останалата част от вашата програмна логика.

Ползите от функционалното програмиране

  • Позволява ви да избегнете объркващи проблеми и грешки в кода
  • По-лесно тестване и изпълнение на модулно тестване и отстраняване на грешки в FP код.
  • Паралелна обработка и паралелност
  • Внедряване на горещ код и толерантност към грешки
  • Предлага по-добра модулност с по-кратък код
  • Повишена производителност на разработчика
  • Поддържа вложени функции
  • Функционални конструкции като Lazy Map & Lists и др.
  • Позволява ефективно използване на Lambda Calculus

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

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

Функционално програмиране срещу обектно-ориентирано програмиране

Функционално програмиране OOP
FP използва неизменни данни. OOP използва променливи данни.
Следва модел, базиран на декларативно програмиране. Следва императивния модел на програмиране.
Това, което се фокусира е върху: „Какво правите. в програмата.” Това, което се фокусира е върху „Как правите вашето програмиране“.
Поддържа паралелно програмиране. Няма поддръжка за паралелно програмиране.
Функциите му нямат странични ефекти. Методът може да предизвика много странични ефекти.
Контролът на потока се извършва с помощта на извиквания на функции и извиквания на функции с рекурсия. Процесът на контрол на потока се провежда с помощта на цикли и условни изрази.
Редът на изпълнение на изразите не е много важен. Редът на изпълнение на изразите е важен.
Поддържа както „Абстракция над данни“, така и „Абстракция над поведение“. Поддържа само „Абстракция върху данни“.

Заключение

  • Функционалното програмиране или FP е начин на мислене за изграждането на софтуер, базиран на някои основни дефиниращи принципи
  • Концепциите за функционално програмиране се фокусират върху резултатите, а не върху процеса
  • Целта на всеки FP език е да имитира математическите функции
  • Някои от най-известните функционални езици за програмиране: 1) Haskell 2) SM 3) Clojure 4) Scala 5) Erlang 6) Clean
  • „Чиста функция“ е функция, чиито входове са декларирани като входове и никой от тях не трябва да бъде скрит. Изходите също се декларират като изходи.
  • Неизменните данни означава, че трябва лесно да можете да създавате структури от данни, вместо да променяте такива, които вече съществуват
  • Позволява ви да избегнете объркващи проблеми и грешки в кода
  • Функционалният код не е лесен, така че е труден за разбиране от начинаещия
  • FP използва неизменни данни, докато OOP използва променливи данни