Charakterystyka programowania funkcjonalnego, przykłady, zalety, wady

Charakterystyka programowania funkcjonalnego, przykłady, zalety, wady

Programowanie funkcjonalne Odpowiada to wzorzec programowania oparty na koncepcji stwierdzenia postępowania programu jako matematycznego modelu funkcjonalnego, a nie jako wyraźnych sekwencji instrukcji dla procesora, który jest główną koncepcją w programowaniu imperatywnym.

Język funkcjonalny podkreśla zdania i warunki zamiast wykonywania instrukcji. W tym programie wynik będzie zależeć tylko od parametrów przekazywanych do funkcji, w przeciwieństwie do innych typów, które są przestrzegane przez stan lokalny lub globalny.

Jak działa funkcja mapowania w języku programowania funkcjonalnego Haskell. Źródło: autor: PLUKE - Own Work, CC0 Commons.Wikimedia.org.

Jego nazwa pochodzi z funkcji matematycznych, które są alokacją zestawu wpisów na zestaw wyjść. Funkcja matematyczna naprawdę nie działa, ale opisuje model procesu, wyjaśniając formułę, co zbiór wpisów wytwarza w funkcji.

[TOC]

Podstawowe pomysły

Podstawą, na której opierało się programowanie funkcjonalne, było obliczenia Lambda, które zostało opracowane w trzeciej dekadzie XX wieku w celu zdefiniowania i zastosowania funkcji. LISP był pierwszym językiem tego typu, zaprojektowanego w 1960 roku.

Chociaż większość języków programowania składa się z zewnętrznych wpisów, wyjść i zmiennych, które można skonfigurować lub używać z funkcji, programowanie funkcjonalne zapobiega. Chodzi o to, że za każdym razem, gdy funkcja jest wywoływana z tymi samymi parametrami, musi zwrócić tę samą wartość.

Charakterystyka

Języki programowania funkcjonalnego są nazywane aplikacjami, ponieważ funkcje mają zastosowanie do ich parametrów, oprócz deklaratywnych i nieroceduralnych, ponieważ definicje określają, co chcesz obliczyć, a nie jak obliczane.

Czyste funkcje

Funkcja jest czysta, gdy nie ma obserwowalnych skutków ubocznych, takich jak zmiana zmiennych zewnętrznych, zmiany w systemie plików itp.

Funkcje te są uważane za przekonujące, ponieważ nie zmienią wyraźnie żadnej zmiennej, na której inne części kodu mogą polegać. Wydaje się to niewygodne kodyfikujące z tymi ograniczeniami, ale należy uznać, że funkcje te są deterministyczne, przewidywalne i składowe.

Funkcje pierwszej klasy

Funkcje są uważane za wartości, które można przypisać do zmiennych, aby mogły je przekazać i zwrócić z innych funkcji. Oznacza to, że funkcja może być używana tak, jakby była parametrem lub jako zwracana wartość.

Oznacza to, że funkcja może być przesyłana jako taka, zamiast tylko wyniku funkcji. Na przykład rozważ funkcję podwójnego (x), która zwraca dwukrotność wartości parametru wejściowego. Zatem podwójne (2) zwróci 4.

Może ci służyć: ewolucja konserwacji przemysłowej: od pochodzenia do teraźniejszości

Podobnie jak funkcja pierwszej klasy, kod (podwójny (podwójny (2)) byłby taki sam jak podwójny kod (4). Pozwala to gniazdować funkcję jako parametr innej i tak dalej.

Przejrzystość referencyjna

Odnosi się do faktu, że w tym wzorze programowania nie ma zdań z przydziału. To znaczy, należy zdefiniować nowe zmienne, jeśli pożądane są dodatkowe wartości. Dlatego stan zmiennej jest zawsze stały.

Eliminuje to najmniejszą możliwość niepożądanych efektów, ponieważ każda zmienna może zostać zastąpiona przez jej rzeczywistą wartość podczas dowolnego punktu wykonywania programu.

Rekurencja

W programowaniu funkcjonalnym nie ma pętli „dla” i „podczas”. Zamiast tego iteracja zależy od rekurencji. Rekurencja jest wdrażana przy użyciu funkcji rekurencyjnych, które nazywają się powtarzalnie.

Niezmienność

Zmienne są niezmienne, to znaczy nie można zmodyfikować zmiennej po zainicjowaniu. Chociaż można utworzyć nową zmienną, istniejące zmienne nie są dozwolone.

Przykłady

Podejścia imperatywne i deklaratywne

Z przykładem można przeanalizować różnicę między tymi podejściami, wykonując tę ​​samą operację w obu przepisach, czyli filtrowania liczb nieparzystych listy, podczas gdy liczby mniejsze niż 5 są zastąpione przez 5.

Jest to te same obliczenia, z tym samym wynikiem. Jednak, jak widać, kod imperatywny jest szczegółowy i nie jest od razu jasny. Z drugiej strony podejście deklaratywne jest czytelne i jawne, ponieważ koncentruje się na tym, co chcesz uzyskać.

Czyste funkcje

Możesz wyjaśnić, co definiuje się jako czyste i nieczyste funkcje za pomocą niektórych podstawowych przykładów:

Funkcje takie jak obiekty pierwszej klasy

Oznacza korzystanie z funkcji w taki sam sposób, jak wykorzystywane są dane. Dlatego mogą przejść jako parametry do innej funkcji. W poniższym przykładzie możesz przekazać funkcję int jako parametr do funkcji MAP:

>>> Lista (map (int, [„1”, „2”, „3”]))))

[1, 2, 3]

Można je przypisać do zmiennych i zwrócić je. Na przykład można przypisać następującemu kodowi funkcję hello_world, a następnie wykonywać zmienną jako funkcję.

Zalety

- Skoncentruj się na tym, co chcesz osiągnąć (deklaratywne), a nie jak to osiągnąć (konieczne).

- Nie zawierają zdań alokacji, więc po tym, jak zmienne otrzymają wartość, nie będą już się zmieniać. Dlatego programy funkcjonalne nie zawierają skutków ubocznych.

Może ci służyć: katastrofy technologiczne

- Przepływ logiczny jest jasny, ponieważ państwo jest mniej rozproszone i nie jest domyślnie zmodyfikowane.

- Przyznaje koncepcję oceny odroczonej, co oznacza, że ​​wartość jest oceniana i przechowywana tylko w razie potrzeby.

- Ponieważ czyste funkcje nie zmieniają żadnego stanu i zależą całkowicie od wejścia, są łatwe do zrozumienia. Wartość zwracana podana przez takie funkcje jest taka sama, jak wynikający z nich wynik.

- Ze względu na charakter czystych funkcji zapobiegania zmianie zmiennych lub danych zewnętrznych, wdrażanie zbieżności staje się skuteczne.

- Funkcje są traktowane jako wartości, przechodząc do innych funkcji, takich jak parametry. Poprawia to zrozumienie i czytelność kodu.

- Czyste funkcje przyjmują parametry raz, tworząc niezmienne wyjście. Dzięki zastosowaniu niezmiennych wartości, oczyszczanie i testy są ułatwione.

Krótszy i łatwiejszy do zrozumienia

Są krótsze i łatwiejsze do zrozumienia niż imperatywy. Badania wykazały, że średnia wydajność programisty pod względem linii kodu jest mniej więcej taka sama dla każdego języka programowania, tłumacząc większą wydajność.

Brak przepływu kontrolnego

Podczas wywoływania funkcji nie możesz mieć innego efektu niż obliczenie jej wyniku. Wyklucza to ważne źródło błędów, co sprawia, że ​​zamówienie wykonawcze nie jest nieistotne, ponieważ żaden efekt uboczny nie może zmienić wartości wyrażenia, możliwość oceny w dowolnym momencie.

Programista uspokoi ciężar ustanowienia przepływu kontrolnego. Ponieważ wyrażenia można ocenić w dowolnym momencie, zmienne można zastąpić ich wartościami.

Ta autonomia sprzyja, że ​​programy funkcjonalne są bardziej matematycznie zarządzane niż programy konwencjonalne.

Niedogodności

- Funkcjonalny paradygmat programowania nie jest prosty, więc dla początkującego trudno jest zrozumieć.

- Trudno go utrzymać, ponieważ podczas kodowania wielu obiektów ewoluuje.

- W niektórych przypadkach, pisząc czyste funkcje, spowodowane jest zmniejszenie czytelności kodu.

- Niezmienne wartości w połączeniu z rekurencją mogą prowadzić do drastycznego zmniejszenia wydajności systemu.

- Ponowne użycie jest bardzo skomplikowane i wymaga stałej refaktoryzacji.

- Pisanie programów o stylu rekurencyjnym zamiast używania więzi lub pętli może być bardzo zniechęcającym zadaniem.

- Obiekty mogą nie reprezentować poprawnie problemu.

Może Ci służyć: 50 zalecanych blogów gier wideo

- Chociaż pisanie czystych funkcji okazuje się proste, połączenie ich z resztą aplikacji i z operacjami wejściowymi/wyjściowymi jest dość trudne

Aplikacje

Program sztucznej inteligencji jest przeprowadzany w funkcjonalnych językach programowania i technik sztucznej inteligencji migrują do aplikacji w świecie rzeczywistym.

Wyróżnia się także wdrożeniem złożonych modeli matematycznych. Z tego powodu jedno z głównych zastosowań języków funkcjonalnych tradycyjnie było akademickie. Przydaje się do opracowania specyfikacji wykonywalnych i implementacji prototypowych.

Wiele języków funkcjonalnych wyróżnia się również wdrożeniem przetwarzania równoległego. Wynika to z jego zdolności do korzystania z czystych funkcji, które zawsze zwracają tę samą wartość niezależnie od kolejności, w jakiej są wykonywane.

Metodologia funkcjonalna

WhatsApp korzysta z języka programowania ERLAG, który śledzi model programowania funkcjonalnego, umożliwiając ponad sto jego pracowników obsługę danych należących do około 1.600 milionów ludzi.

Kolejnym ważnym nośnikiem stylu programowania funkcjonalnego jest Haskell. Jest używany przez Facebook w systemie antispam. Nawet JavaScript, jeden z najczęściej używanych języków programowania, ma właściwości dynamicznego języka funkcjonalnego.

Języki obsługujące programowanie funkcjonalne

D

Został zaprojektowany po C ++, uzyskując wszystkie swoje korzyści, jednocześnie eliminując jego słabości zaobserwowane, ponieważ konieczność kompatybilna z C.

Erlang

Jest wysoce skalowalny i równoczesny, dzięki czemu jest idealny do telekomunikacji i innych aplikacji, które otrzymują ogromne ilości danych w nieprzewidywalnej kolejności.

Haskell

Jest to czysty język programowania funkcjonalnego, który wykorzystuje dla niego obliczenia Lambda.

Ml

Jest stosowany w matematycznych, naukowych, finansowych, analitycznych i innych typach innych typów. Jedną z jego mocnych stron jest tworzenie oprogramowania do obsługi innych programów.

CAML CAML

Jest to język open source oparty na CAML. Ma tendencję do tworzenia bardzo lekkich programów, pomagając im załadować i wykonywać szybciej niż te tworzone przez inne języki.

Schemat

Opiera się na składni LISP i strukturze algolu. Dzięki swojej prostocie jest wykorzystywany na wielu kursach komputerowych jako wprowadzenie do projektowania programów, aby pokazać niektóre podstawy programowania komputerowego.

Bibliografia

  1. WHHO jest gospodarzem tego (2019). Naucz się programowania funkcjonalnego: ten styl kodowania zasłania ci umysł. Zaczerpnięte z: Whoisostingthis.com.
  2. Andrea Bertoli (2019). Odpowiednie wprowadzenie do programu funkcjonalnego. Zaczerpnięte z: dev.Do.
  3. Hacker Earth (2020). Programowanie funkcjonalne. Zaczerpnięte z: Hakereph.com.
  4. Clojure (2020). Programowanie funkcjonalne. Zaczerpnięte z: Clojure.org.
  5. Akhil Bhadwal (2020). Programowanie funkcjonalne: koncepcje, przygody, wady i aplikacje. Hackr. Zaczerpnięte z: hackr.Io.
  6. Guru99 (2020). Co to jest programowanie funkcjonalne? Z przykładowym samouczkiem. Zaczerpnięte z: Guru99.com.