Programowanie funkcjonalne - wprowadzenie
Funkcjonalne języki programowania są specjalnie zaprojektowane do obsługi obliczeń symbolicznych i aplikacji do przetwarzania list. Programowanie funkcjonalne opiera się na funkcjach matematycznych. Niektóre z popularnych funkcjonalnych języków programowania to: Lisp, Python, Erlang, Haskell, Clojure itp.
Funkcjonalne języki programowania są podzielone na dwie grupy, tj.
Pure Functional Languages- Te typy języków funkcyjnych obsługują tylko paradygmaty funkcjonalne. Na przykład - Haskell.
Impure Functional Languages- Te typy języków funkcyjnych wspierają paradygmaty funkcjonalne i imperatywny styl programowania. Na przykład - LISP.
Programowanie funkcjonalne - charakterystyka
Najważniejsze cechy programowania funkcjonalnego są następujące -
Funkcjonalne języki programowania są zaprojektowane w oparciu o koncepcję funkcji matematycznych, które używają wyrażeń warunkowych i rekurencji do wykonywania obliczeń.
Programowanie funkcjonalne obsługuje higher-order functions i lazy evaluation funkcje.
Funkcjonalne języki programowania nie obsługują kontrolek przepływu, takich jak instrukcje pętli i instrukcje warunkowe, takie jak instrukcje If-Else i Switch. Bezpośrednio używają funkcji i wywołań funkcyjnych.
Podobnie jak OOP, funkcjonalne języki programowania obsługują popularne koncepcje, takie jak abstrakcja, enkapsulacja, dziedziczenie i polimorfizm.
Programowanie funkcjonalne - zalety
Programowanie funkcjonalne oferuje następujące korzyści -
Bugs-Free Code - Programowanie funkcjonalne nie obsługuje state, więc nie ma skutków ubocznych i możemy pisać bezbłędne kody.
Efficient Parallel Programming- Funkcjonalne języki programowania NIE mają stanu mutowalnego, więc nie ma problemów ze zmianą stanu. Można zaprogramować „Funkcje”, aby działały równolegle jako „instrukcje”. Takie kody zapewniają łatwość ponownego użycia i testowalności.
Efficiency- Programy funkcjonalne składają się z niezależnych jednostek, które mogą działać równolegle. W rezultacie takie programy są bardziej wydajne.
Supports Nested Functions - Programowanie funkcjonalne obsługuje funkcje zagnieżdżone.
Lazy Evaluation - Programowanie funkcjonalne obsługuje leniwe konstrukcje funkcjonalne, takie jak leniwe listy, leniwe mapy itp.
Wadą programowania funkcjonalnego jest duża ilość pamięci. Ponieważ nie ma stanu, za każdym razem musisz tworzyć nowe obiekty, aby wykonywać akcje.
Programowanie funkcjonalne jest używane w sytuacjach, gdy musimy wykonać wiele różnych operacji na tym samym zestawie danych.
Lisp jest używany w aplikacjach sztucznej inteligencji, takich jak uczenie maszynowe, przetwarzanie języka, modelowanie mowy i widzenia itp.
Wbudowane interpretery Lisp dodają programowalność do niektórych systemów, takich jak Emacs.
Programowanie funkcjonalne a programowanie obiektowe
Poniższa tabela przedstawia główne różnice między programowaniem funkcjonalnym a programowaniem obiektowym -
Programowanie funkcjonalne | OOP |
---|---|
Używa niezmiennych danych. | Używa mutowalnych danych. |
Podąża za deklaratywnym modelem programowania. | Podąża za imperatywnym modelem programowania. |
Skupiamy się na: „Co robisz” | Skoncentruj się na „Jak się masz” |
Obsługuje programowanie równoległe | Nie nadaje się do programowania równoległego |
Jego funkcje nie mają skutków ubocznych | Jej metody mogą powodować poważne skutki uboczne. |
Sterowanie przepływem odbywa się za pomocą wywołań funkcji i wywołań funkcji z rekurencją | Sterowanie przepływem odbywa się za pomocą pętli i instrukcji warunkowych. |
Wykorzystuje koncepcję „rekurencji” do iteracji danych kolekcji. | Wykorzystuje koncepcję „pętli” do iteracji danych kolekcji. Na przykład: pętla For-each w Javie |
Kolejność wykonywania instrukcji nie jest tak ważna. | Kolejność wykonywania instrukcji jest bardzo ważna. |
Obsługuje zarówno „Abstrakcję na podstawie danych”, jak i „Abstrakcję na podstawie zachowania”. | Obsługuje tylko „Abstrakcję na podstawie danych”. |
Efektywność kodu programu
Wydajność kodu programistycznego jest wprost proporcjonalna do wydajności algorytmicznej i szybkości wykonywania. Dobra wydajność zapewnia wyższą wydajność.
Czynniki wpływające na skuteczność programu obejmują:
- Prędkość maszyny
- Szybkość kompilatora
- System operacyjny
- Wybór odpowiedniego języka programowania
- Sposób danych w programie jest zorganizowany
- Algorytm zastosowany do rozwiązania problemu
Wydajność języka programowania można poprawić, wykonując następujące zadania -
Usuwając niepotrzebny kod lub kod, który trafia do redundantnego przetwarzania.
Wykorzystując optymalną pamięć i pamięć trwałą
Wykorzystując wszędzie tam, gdzie ma to zastosowanie, komponenty wielokrotnego użytku.
Korzystając z obsługi błędów i wyjątków na wszystkich warstwach programu.
Tworząc kod programistyczny zapewniający integralność i spójność danych.
Opracowując kod programu zgodny z logiką projektowania i przepływem.
Wydajny kod programistyczny może maksymalnie zredukować zużycie zasobów i czas realizacji przy minimalnym ryzyku dla środowiska operacyjnego.