Sobes.tech
Junior

Jaka jest różnica między programowaniem imperatywnym a deklaratywnym?

sobes.tech AI

Odpowiedź od AI

Programowanie imperatywne opisuje jak coś zrobić, wskazując sekwencję kroków. Programowanie deklaratywne opisuje co należy zrobić, nie zagłębiając się w szczegóły implementacji.

  • Imperatywne: Skupia się na przepływie sterowania i zmianach stanu programu. Mówisz komputerowi, jak przejść z jednego stanu do drugiego.
  • Deklaratywne: Skupia się na logice obliczeń, nie opisując jawnie przepływu sterowania. Mówisz komputerowi, co chcesz osiągnąć.

Przykłady:

  • Imperatywne podejście do znajdowania liczb parzystych w slice:

    // Podejście imperatywne
    func findEvenImperative(nums []int) []int {
    	var evenNums []int // Deklarujemy zmienną dla wyniku
    	for _, num := range nums { // Iterujemy po elementach
    		if num%2 == 0 { // Sprawdzamy warunek
    			evenNums = append(evenNums, num) // Dodajemy do wyniku
    		}
    	}
    	return evenNums // Zwracamy wynik
    }
    
  • Podejście deklaratywne (np. z użyciem SQL, które jest deklaratywne z natury):

    Chociaż Golang jest w dużej mierze imperatywny, idea deklaratywności ilustrowana jest na przykładzie zapytania do bazy danych:

    -- Podejście deklaratywne (SQL)
    SELECT *
    FROM numbers
    WHERE number % 2 = 0;
    

    Tutaj po prostu deklarujemy, że chcemy otrzymać wszystkie wiersze z tabeli numbers, gdzie number jest parzyste, nie opisując dokładnie, jak baza danych powinna to zrobić (np. jaki algorytm wyszukiwania lub filtrowania użyć).

Główne różnice można podsumować w tabeli:

Właściwość Programowanie imperatywne Programowanie deklaratywne
Fokus Jak (sekwencja kroków) Co (pożądany rezultat)
Przepływ sterowania Zarządzany jawnie przez programistę Ukryty lub abstrakcyjny
Stan Aktywnie zmieniany Mniej jawnie zmieniany lub niemutowalny
Przykłady C, Java, Python (głównie), Go SQL, HTML, CSS, React (JSX)

W Go częściej używa się stylu imperatywnego, ale koncepcje deklaratywności pojawiają się w określonych podejściach, np. przy użyciu bibliotek do pracy z danymi lub w opisie konfiguracji.