Sobes.tech
Junior

Jaký je rozdíl mezi imperativním a deklarativním programováním?

sobes.tech AI

Odpověď od AI

Imperativní programování popisuje jak něco udělat, uvádí sekvenci kroků. Deklarativní programování popisuje co je třeba udělat, aniž by se zabývalo detaily implementace.

  • Imperativní: Zaměřuje se na tok řízení a změny stavu programu. Říkáte počítači, jak přejít z jednoho stavu do druhého.
  • Deklarativní: Zaměřuje se na logiku výpočtů, nepopisuje explicitně tok řízení. Říkáte počítači, čeho chcete dosáhnout.

Příklady:

  • Imperativní přístup k hledání sudých čísel v slice:

    // Imperativní přístup
    func findEvenImperative(nums []int) []int {
    	var evenNums [] // Deklarace proměnné pro výsledek
    	for _, num := range nums { // Procházení prvků
    		if num%2 == 0 { // Kontrola podmínky
    			evenNums = append(evenNums, num) // Přidání do výsledku
    		}
    	}
    	return evenNums // Vrácení výsledku
    }
    
  • Deklarativní přístup (například s použitím SQL, které je deklarativní svou přirozeností):

    Ačkoliv Golang je z velké části imperativní, myšlenka deklarativnosti je ilustrována na příkladu dotazu do databáze:

    -- Deklarativní přístup (SQL)
    SELECT *
    FROM numbers
    WHERE number % 2 = 0;
    

    Zde jednoduše deklarujeme, že chceme získat všechny řádky z tabulky numbers, kde je number sudé, aniž bychom popisovali, jak přesně to má databáze udělat (například jaký algoritmus hledání nebo filtrování použít).

Hlavní rozdíly lze shrnout v tabulce:

Vlastnost Imperativní programování Deklarativní programování
Zaměření Jak (sekvence kroků) Co (požadovaný výsledek)
Řízení toku Explicitně řízeno programátorem Skryto nebo abstraktně
Stav Aktivně se mění Méně explicitně se mění nebo je neměnný
Příklady C, Java, Python (převážně), Go SQL, HTML, CSS, React (JSX)

V Go se často používá imperativní styl, ale koncepty deklarativnosti se objevují v určitých přístupech, například při použití knihoven pro práci s daty nebo při popisu konfigurací.