Sobes.tech
Junior

Aký je rozdiel medzi imperatívnym a deklaratívnym programovaním?

sobes.tech AI

Odpoveď od AI

Imperatívne programovanie popisuje ako niečo urobiť, uvádzaním sekvencie krokov. Deklaratívne programovanie popisuje čo treba urobiť, bez zbytočného zaoberania sa detailmi implementácie.

  • Imperatívne: Zameriava sa na tok riadenia a zmeny stavu programu. Povedáte počítaču, ako prejsť z jedného stavu do druhého.
  • Deklaratívne: Zameriava sa na logiku výpočtov, nepopisujúc jasne tok riadenia. Povedáte počítaču, čo chcete dosiahnuť.

Príklady:

  • Imperatívny prístup k hľadaniu párnych čísel v poli:

    // Imperatívny prístup
    func findEvenImperative(nums []int) []int {
    	var evenNums []int // Vyhlasujeme premennú pre výsledok
    	for _, num := range nums { // Prechádzame prvky
    		if num%2 == 0 { // Kontrola podmienky
    			evenNums = append(evenNums, num) // Pridanie do výsledku
    		}
    	}
    	return evenNums // Vrátenie výsledku
    }
    
  • Deklaratívny prístup (napríklad s použitím SQL, ktorý je svojou povahou deklaratívny):

    Hoci je Golang sám o sebe do veľkej miery imperatívny, myšlienka deklaratívnosti je ilustrovaná na príklade dotazu do databázy:

    -- Deklaratívny prístup (SQL)
    SELECT *
    FROM numbers
    WHERE number % 2 = 0;
    

    Tu jednoducho deklarujeme, že chceme získať všetky riadky z tabuľky numbers, kde je number párne, bez toho, aby sme opisovali, ako presne má databáza túto úlohu vykonať (napríklad, aký algoritmus vyhľadávania alebo filtrovania použiť).

Hlavné rozdiely možno zhrnúť do tabuľky:

Vlastnosť Imperatívne programovanie Deklaratívne programovanie
Zameranie Ako urobiť (sekvencia krokov) Čo urobiť (želateľný výsledok)
Tok riadenia Jasne riadený programátorom Skrytý alebo abstraktný
Stav Aktívne sa mení Menej jasne sa mení alebo nemenný
Príklady C, Java, Python (väčšinou), Go SQL, HTML, CSS, React (JSX)

V Go sa častejšie používa imperatívny štýl, ale koncepty deklaratívnosti sa objavujú v určitých prístupoch, napríklad pri používaní knižníc na prácu s dátami alebo v opise konfigurácií.