Dzisiaj poruszymy temat programowania funkcyjnego, a mianowicie różnicę między programowaniem deklaratywnym a imperatywnym.

Najpierw przejrzyjmy szybko pojęcia, a następnie porównajmy te style programowania i zobaczmy, jak mają one odzwierciedlenie w Javie i czy mogą współistnieć w tym języku.

Programowanie funkcyjne to paradygmat, w którym proces obliczeniowy definiowany jest przez obliczanie wartości funkcji w ich matematycznym rozumieniu, a nie w rozumieniu podprogramów, jak w programowaniu proceduralnym . Oznacza to, że w tych dwóch paradygmatach znaczenie słowa „funkcja” jest różnie interpretowane. Należy o tym pamiętać i nie mylić. W Javie nie można się z tym pomylić: funkcje w znaczeniu podprogramów to „metody”, a funkcje jako funkcje matematyczne to po prostu „funkcje” (także: funkcje lambda lub odwołanie do metody).

W praktyce w programowaniu proceduralnym funkcje zależą nie tylko od zmiennych wejściowych, ale także od czynników zewnętrznych (na przykład innych zmiennych poza funkcją lub stanem systemu). Zatem wywołanie tej samej funkcji z tymi samymi argumentami w innym kontekście może dać różne wyniki. W programowaniu funkcyjnym, wywołując funkcję z tymi samymi argumentami, zawsze otrzymujemy ten sam wynik, ponieważ funkcje zależą tylko od danych wejściowych.

Plusy programowania funkcjonalnego

  • Popraw niezawodność kodu
  • Łatwość organizacji testów jednostkowych
  • Kompilowanie opcji optymalizacji kodu
  • Możliwości współbieżności

Wady programowania funkcjonalnego

Wady programowania funkcyjnego wynikają z tych samych cech:

  • Brak przypisań i ich zastępowanie generowaniem nowych danych prowadzi do konieczności ciągłego przydzielania i automatycznego zwalniania pamięci. Dlatego wysokowydajny moduł odśmiecania pamięci staje się obowiązkowym elementem systemu wykonawczego programu funkcjonalnego.

  • Nieścisły model obliczeniowy prowadzi do nieprzewidywalnej kolejności wywołań funkcji, co stwarza problemy w operacjach we/wy, gdzie ważna jest kolejność operacji.

Skrócona instrukcja programowania funkcjonalnego jest zakończona, przejdźmy teraz do stylów programowania.

Programowanie imperatywne to paradygmat programowania charakteryzujący się następującymi cechami:

  • Instrukcje (polecenia) są zapisane w kodzie źródłowym programu.

  • Instrukcje należy wykonywać sekwencyjnie.

  • Dane uzyskane przez wykonanie poprzednich instrukcji mogą być odczytywane z pamięci przez kolejne instrukcje.

  • Dane otrzymane podczas wykonywania instrukcji mogą zostać zapisane w pamięci.

Główne cechy języków imperatywnych:

  • Używanie nazwanych zmiennych.
  • Korzystanie z operatora przypisania.
  • Używanie wyrażeń złożonych.
  • Korzystanie z podprogramów.

Program rozkazujący jest podobny do rozkazów wyrażanych w trybie rozkazującym w językach naturalnych, czyli jest ciągiem rozkazów.

Imperatywne języki programowania to C, C++.

Programowanie deklaratywne to paradygmat programowania, w którym określona jest specyfikacja rozwiązania problemu, czyli opisany jest efekt końcowy, a nie sposób jego osiągnięcia. Przykładami języków deklaratywnych jest język znaczników HTML. Pisząc tagi w tym języku nie myślimy o tym jak elementy będą narysowane na stronie, tylko opisujemy jak ta strona ma wyglądać.

Innym deklaratywnym językiem programowania jest SQL.

Aby porównać dwa style programowania , rozważmy przykład z życia wzięty: jak wytłumaczyć osobie, jak dostać się w określone miejsce?

Wyobraźmy sobie sytuację: na ulicy podszedł do nas mężczyzna i zapytał: „Jak dostać się do muzeum N?”

Z imperatywnym podejściem wyjaśnilibyśmy mu algorytm dotarcia tam pieszo:

  • odwróć się teraz
  • idź 2 bloki w linii prostej
  • Skręć w prawo

Przy podejściu deklaratywnym po prostu podajemy adres, a następnie sama osoba (narzędzia) trafia we właściwe miejsce.

Java jest obecnie wieloparadygmatowym językiem programowania . Wieloparadygmat to fakt, że język obsługuje kilka paradygmatów.

Podczas swojej długiej ewolucji język rozszerzył swój obiektowy model, aby zapewnić swoim użytkownikom różnorodne narzędzia do wyboru najlepszego dla ich konkretnego zadania.

Dlatego Java obsługuje obecnie zarówno podejście imperatywne (takie jak pisanie kodu dla wywołań metod), jak i podejście deklaratywne (takie jak adnotacje dostępne w środowisku wykonawczym).

Podsumować:

  • Istnieją różne paradygmaty programowania.

  • Istnieją podejścia deklaratywne i imperatywne.

  • Warto wybrać ten, który lepiej poradzi sobie z rozwiązaniem zadań.

  • Java to wieloparadygmatyczny język obsługujący oba podejścia.