Programowanie funkcyjne

Programowanie funkcyjne (funkcjonalne) jest odmianą programowania deklaratywnego, z wykorzystaniem funkcji. Czyli zamiast szczegółowego opisywaniarozwiązania problemu (algorytmu), skupiamy się na jego jednoznacznym opisie. Na przykład algorytm liczenia długości listy polega na zliczeniu ilości elementów. Zamiast niego możemy się posłużyć definicją: jest to długość końcówki - po odjęciu pierwszego elementu - zwiększona o 1, przy czym długość pustego łańcucha wynosi zero.

długość([]) = 0
długość([pierwszy_element,końcówka]) = długość(końcówka)+1

Taką definicję nazywamy rekurencyjną (rekurencja jest często wykorzystywana w programowaniu funkcyjnym). Zapis funkcyjny programów ma liczne konsekwencje (https://4programmers.net/In%C5%BCynieria_oprogramowania/Wst%C4%99p_do_programowania_funkcyjnego):

  • zamiast tradycyjnego ciągu instrukcji, wykonywanych w ściśle ustalonej kolejności, mamy opis problemu wyrażany za pomocą matematycznych zależności i wyrażeń (funkcji), przy czym nie znamy kolejności, w której będą one wykonywane.
  • Instrukcja przypisania staje się bezużyteczna, gdyż nie znamy chwili w której będzie ona wykonana.
  • Nie obsługujemy mechanizmów przydzielania i zwalniania pamięci.
  • Ponieważ nie musimy sterować kolejnością wykonania, unikamy wielu potencjalnych błędów.

Skoro nie ma instrukcji przypisania, możemy przyjąć, że program zapisany w języku funkcyjnym nie zmiena danych (stanu pamięci), ale opisuje wynik działania. W praktyce (w Javascript) zakłada się, że zmiana stanu dotyczy całego systemu (wyrenderowanej na nowo strony). Po ustaleniu tego stanu - nie ulega on zmianie. Ciągle jednak można zainicjować nowe renderowanie (znów otrzymujemy nowy stan po jednokrotnym wyliczeniu przez program w języku funkcyjnym.