Skip to main content

Co to jest programowanie funkcjonalne?

Programowanie funkcjonalne jest paradygmatem programowania, w którym podstawą obliczeń jest ocena wyrażeń.Niektóre cechy to zastosowanie funkcji wyższego rzędu, przejrzystości referencyjnej i leniwej oceny.Zalety stylu programowania obejmują to, że programy są łatwe do odczytania, są bardzo niezawodne i można je podzielić na komponenty.Wady są takie, że obliczenia mogą być powolne, a styl i składnia są zupełnie różne od innych typowych stylów programowania.Funkcjonalny styl programowania jest częściej przyjmowany przez naukowców niż przez specjalistów informatyki.

Jak sama nazwa wskazuje, funkcje są podstawową częścią tego paradygmatu programowania.Funkcje mogą być zagnieżdżone w innych funkcjach, zwanych funkcjami wyższego rzędu, a każda funkcja wyższego rzędu może być podzielona na funkcje bloków budulcowych, które są łatwe do zrozumienia i debugowanie.Przykładami niektórych funkcji wyższego rzędu to mapa i gniazdo.Mapa funkcji ma na przykład funkcję f i listę zmiennych (x, y, z) i daje wynik na liście: mapa [f, (x, y, z)] ' (f (x), f(y), f (z)).Nest przyjmuje funkcję f, zmienną x i liczbę iteracji: gest [f, x, 3] ' f (f (f (x))).

Pure Funkcjonalne programowanie wymaga wejścia i zwraca dane wyjściowe bez zmiany stanu zmiennej.Innymi słowy, funkcja z tym samym wejściem zawsze daje te same wyniki, niezależnie od tego, co wydarzyło się wcześniej w programie.Nazywa się to przejrzystością referencyjną.Ponieważ funkcje matematyczne są odwołane, programowanie funkcjonalne jest intuicyjne dla wielu matematyków, inżynierów i naukowców.

Referencyjna przezroczystość funkcji oznacza, że kolejność oceny funkcji nie jest ważna.Dlatego funkcje nie muszą być oceniane, dopóki nie będą potrzebne ich wyniki, co nazywa się leniwą oceną.Jest to w pełni kontrastowe z programowaniem imperatywnym, w którym program zaczyna się od pierwszego polecenia i przechodzi przez listę do ostatniego polecenia.Leniwa ocena pomija części programu, które nie są logicznie lub są zbędne, co automatycznie optymalizuje program i może skrócić czas obliczeń.

Programowanie funkcjonalne ma wiele zalet w porównaniu z innymi paradygmatami programowania.Funkcje z wyraźnymi wejściami i wyjściami są łatwe do odczytania i zrozumienia.Po dokładnym debugowaniu funkcji można ją niezawodnie wykorzystać w innych aplikacjach.Maszyny wielordzeniowe mogą być w stanie obliczyć funkcje, które są oceniane niezależnie równolegle, drastycznie poprawiając wydajność programów.

Niestety, nie wszystkie programy nadają się do równoległego obliczeń, a obliczanie programów funkcjonalnych może być raczej powolna.Programy funkcjonalne w dużej mierze polegają na rekurencji, która często jest mniej wydajna niż przy użyciu tradycyjnych pętli lub metod iteracji.W rzeczywistości programowanie funkcjonalne może być dość niezdarne i trudne do nauczenia się, ponieważ nie przypomina innych bardziej powszechnych paradygmatów, takich jak programowanie zorientowane na obiekty.

Academics sprzyjają programom funkcjonalnym, ponieważ zapewnia jasny i zrozumiały sposób programowania złożonych problemów z prawdziwym światem w świecie rzeczywistym.Niektóre czyste języki to Haskell i Erlang.Mathematica specjalizuje się w symbolicznej matematyce, R jest specjalizowany w statystyce, a J specjalizuje się w analizie finansowej.Języki wieladygmowe, takie jak Scala i F#, obsługują zarówno programowanie funkcjonalne, jak i inne style programowania.