- Основни идеи
- характеристики
- Чисти функции
- Първокласни функции
- Референтна прозрачност
- рекурсия
- неизменност
- Примери
- Императивни и декларативни подходи
- Чисти функции
- Функционира като първокласни обекти
- предимство
- По-кратък и лесен за разбиране
- Няма контролен поток
- Недостатъци
- Приложения
- Функционална методология
- Езици, които поддържат функционално програмиране
- д
- Erlang
- Haskell
- ML
- Цел Caml
- схема
- Препратки
На функционални програмни съответства на програмирането модел се основава на концепцията за посочване на поведението на дадена програма като функционална математически модел, а не изрични последователности от команди за процесор, който е основната концепция в императив за програмиране.
Функционалният език набляга на изявленията и термините, а не на изпълнение на оператори. При това програмиране резултатът ще зависи само от параметрите, които се предават на функция, за разлика от други типове, които се подчиняват на локално или глобално състояние.
Диаграма за функционирането на функцията за картографиране на функционалния език за програмиране на Haskell. Източник: От Pluke - Собствена работа, CC0 commons.wikimedia.org.
Името му идва от математическите функции, които са присвояване на набор от входове към набор от изходи. Математическата функция всъщност не върши никаква работа, а по-скоро описва модела на процеса, обяснявайки чрез формула какво произвежда набор от входове във функция.
Основни идеи
Основата, върху която се основава функционалното програмиране, е изчисляването на ламбда, което е разработено през третото десетилетие на 20 век за определяне и прилагане на функции. LISP е първият подобен език за програмиране, проектиран през 1960г.
Въпреки че повечето езици за програмиране се състоят от входове, изходи и външни променливи, които могат да бъдат зададени или използвани от функциите, функционалното програмиране избягва това. Идеята е, че всеки път, когато дадена функция се извиква със същите параметри, тя трябва да връща една и съща стойност.
характеристики
Функционалните езици за програмиране се наричат приложения, тъй като функциите се прилагат към техните параметри, както и декларативни и непроцедурни, тъй като дефинициите определят какво трябва да се изчисли, а не как се изчислява.
Чисти функции
Функцията е чиста, когато няма забележими странични ефекти, като например промяна на външни променливи, промени в файловата система и т.н.
Тези функции се считат за убедителни, тъй като те изрично не променят никакви променливи, от които в някои моменти могат да зависят другите части на кода. Изглежда неудобно да се кодира с тези ограничения, но тези функции трябва да се считат за детерминистични, предвидими и компилируеми.
Първокласни функции
Функциите се считат за стойности, които могат да бъдат присвоени на променливи, така че те могат да бъдат предадени и върнати от други функции. Тоест, функция може да се използва, като че ли е параметър или като стойност, която се връща.
Това означава, че функцията може да бъде предадена като такава, а не просто резултат от функцията. Например, помислете за функцията double (x), която връща два пъти стойността на входния си параметър. Така двойно (2) би върнало 4.
Тъй като това е функция от първи клас, кодът (двоен (двоен (2)) ще бъде същият като кодът с двойно (4) Това ви позволява да вложите една функция като параметър на друга и т.н.
Референтна прозрачност
Тя се отнася до факта, че в този модел на програмиране няма изявления за присвояване. Тоест, трябва да дефинирате нови променливи, ако искате да запазите допълнителни стойности. Следователно, състоянието на променлива е постоянно по всяко време.
Това елиминира и най-малката възможност за нежелани ефекти, тъй като всяка променлива може да бъде заменена с нейната реална стойност по време на всяка точка на изпълнение на програмата.
рекурсия
Във функционалното програмиране няма цикли "за" и "докато". Вместо това итерацията разчита на рекурсия. Рекурсията се осъществява с помощта на рекурсивни функции, които се наричат многократно, докато се достигне основният случай.
неизменност
Променливите са неизменни, тоест не е възможно да промените променлива, след като е инициализирана. Въпреки че можете да създадете нова променлива, промяната на съществуващите променливи не е позволена.
Примери
Императивни и декларативни подходи
С пример можете да анализирате разликата между тези подходи, изпълнявайки една и съща операция и в двете подредби, която е да филтрирате нечетните числа от списък, докато замествате 5 за четни числа, по-малки от 5.
Това е едно и също изчисление, със същия резултат. Както можете да видите обаче, императивният код е многословен и не веднага ясен. От друга страна, декларативният подход е четим и явен, защото се фокусира върху това, което искате да получите.
Чисти функции
Какво се дефинира като чисти и нечисти функции, може да се изясни с някои основни примери:
Функционира като първокласни обекти
Това означава да използвате функции по същия начин, по който се използват данните. Следователно те могат да бъдат предадени като параметри на друга функция. В следващия пример функцията int може да бъде предадена като параметър на функцията map:
>>> списък (карта (int,))
Те могат да бъдат присвоени на променливи и върнати. Например, в следния код можете да зададете функцията hello_world, след което да изпълните променливата като функция.
предимство
- Фокусирайте се върху това, което искате да постигнете (декларативно), а не върху това как да го постигнете (наложително).
- Те не съдържат оператори за присвояване, така че след като променливите получат стойност, те вече няма да се променят. Следователно функционалните програми не съдържат никакви странични ефекти.
- Логичният поток е ясен, тъй като състоянието е по-малко разпръснато и не се променя косвено.
- Подкрепя концепцията за мързелива оценка, което означава, че стойността се оценява и съхранява само когато е необходимо.
- Тъй като чистите функции не променят никое състояние и са напълно зависими от входа, те са лесни за разбиране. Върнатата стойност, дадена от такива функции, е същата като получения от тях резултат.
- Поради естеството на чистите функции, за да се избегне промяна на променливите или всякакви външни данни, прилагането на едновременността става ефективно.
- Функциите се третират като стойности и преминават към други функции като параметри. Това подобрява разбирането и четимостта на кода.
- Чистите функции приемат параметрите веднъж, създавайки неизменна продукция. Използването на непроменими стойности прави отстраняването на грешки и тестване по-лесно.
По-кратък и лесен за разбиране
Те са по-къси и по-лесни за разбиране от императивите. Проучванията показват, че средната производителност на програмиста по отношение на кодовите редове е повече или по-малко еднаква за всеки език на програмиране, което води до по-висока производителност.
Няма контролен поток
Извикването на функция не може да има различен ефект от изчисляването на нейния резултат. Това изключва важен източник на грешки, като също прави реда на изпълнение без значение, тъй като никой страничен ефект не може да промени стойността на един израз и той може да бъде оценен по всяко време.
Програмистът се освобождава от тежестта на установяването на поток от контрол. Тъй като изразите могат да бъдат оценени по всяко време, променливите могат да бъдат заменени от техните стойности.
Тази автономност прави функционалните програми по-математически управляеми от конвенционалните програми.
Недостатъци
- Парадигмата за функционално програмиране не е проста, така че е трудно за начинаещ да разбере.
- Трудно е да се поддържа, тъй като много обекти се развиват по време на кодиране.
- В някои случаи писането на чисти функции води до намаляване на четливостта на кода.
- Неизменните стойности в комбинация с рекурсия могат да доведат до драстично намаляване на производителността на системата.
- Повторната употреба е много сложна и изисква постоянно рефакторинг.
- Писането на програми в рекурсивен стил, вместо да се използват контури или бримки, може да бъде много обезсърчаваща задача.
- Обектите може да не представят проблема правилно.
- Въпреки че писането на чисти функции се оказва просто, комбинирането им с останалата част от приложението и с операциите за въвеждане / изход е доста трудно
Приложения
Програмирането на изкуствен интелект се извършва на функционални езици за програмиране, а техниките за изкуствен интелект преминават към приложения в реалния свят.
Освен това се отличава с прилагането на сложни математически модели. Поради тази причина една от основните приложения на функционалните езици традиционно е академична. Полезно е за разработване на изпълними спецификации и реализации на прототипи.
Много функционални езици също се отличават с прилагането на паралелна обработка. Това се дължи на способността му да се възползва от чисти функции, които винаги връщат една и съща стойност, независимо от реда, в който се изпълняват.
Функционална методология
WhatsApp използва езика за програмиране на Erlang, който следва модела на функционално програмиране, като по този начин позволява на повече от сто служители да обработват данните, принадлежащи на около 1,6 милиарда души.
Друг важен носител на функционалния стил на програмиране е Haskell. Той се използва от Facebook в неговата антиспам система. Дори JavaScript, един от най-широко използваните езици за програмиране, парадира със свойствата на динамично въведен функционален език.
Езици, които поддържат функционално програмиране
д
Той е проектиран след C ++, като получава всичките му предимства, като същевременно елиминира наблюдаваните му слабости от необходимостта да бъде съвместим с C.
Erlang
Той е силно мащабируем и едновременно, което го прави идеален за телекомуникации и други приложения, които получават огромни количества данни в непредсказуем ред.
Haskell
Това е чист функционален език за програмиране, който използва изчисляване на Lambda.
ML
Използва се в математически, научни, финансови, аналитични и други приложения. Една от неговите силни страни е създаването на софтуер за работа с други програми.
Цел Caml
Това е език с отворен код, който се основава на Caml. Той има тенденция да създава много леки програми, като им помага да се зареждат и да работят по-бързо от тези, създадени от други езици.
схема
Той се основава на синтаксиса LISP и структурата на ALGOL. Поради своята простота, той се използва в много курсове по компютърни науки като въведение в дизайна на програмата, за да покаже някои от основите на компютърното програмиране.
Препратки
- Кой хоства това (2019). Научете функционално програмиране: Този стил на кодиране ще разруши вашия ум. Взета от: whoishostingthis.com.
- Андреа Бертоли (2019). Адекватно запознаване с функционалното програмиране. Взето от: dev.to.
- Хакерска Земя (2020). Функционално програмиране. Взета от: hackerearth.com.
- Clojure (2020). Функционално програмиране. Взета от: clojure.org.
- Ахил Бхадвал (2020). Функционално програмиране: концепции, предимства, недостатъци и приложения. Hack. Взета от: hackr.io.
- Guru99 (2020). Какво е функционално програмиране? Урок с пример. Взета от: guru99.com.