Sobes.tech
Junior

Care este diferența dintre programarea imperativă și cea declarativă?

sobes.tech AI

Răspuns de la AI

Programarea imperativă descrie cum să faci ceva, indicând o secvență de pași. Programarea declarativă descrie ce trebuie făcut, fără a intra în detalii de implementare.

  • Imperativ: Se concentrează pe fluxul de control și pe schimbările de stare ale programului. Spui calculatorului, cum să treacă de la o stare la alta.
  • Declarativ: Se concentrează pe logica calculului, fără a descrie explicit fluxul de control. Spui calculatorului, ce vrei să realizezi.

Exemple:

  • Abordare imperativă pentru găsirea numerelor pare într-un slice:

    // Abordare imperativă
    func findEvenImperative(nums []int) []int {
    	var evenNums []int // Declarăm variabila pentru rezultat
    	for _, num := range nums { // Parcurgem elementele
    		if num%2 == 0 { // Verificăm condiția
    			evenNums = append(evenNums, num) // Adăugăm la rezultat
    		}
    	}
    	return evenNums // Returnăm rezultatul
    }
    
  • Abordare declarativă (de exemplu, folosind SQL, care este de natură declarativă):

    Deși Golang în sine este în mare parte imperativ, ideea de declarativitate este ilustrată în cazul unei interogări la o bază de date:

    -- Abordare declarativă (SQL)
    SELECT *
    FROM numbers
    WHERE number % 2 = 0;
    

    Aici, pur și simplu declarăm că dorim să obținem toate rândurile din tabelul numbers unde number este par, fără a descrie modul exact în care baza de date trebuie să facă acest lucru (de exemplu, ce algoritm de căutare sau filtrare să folosească).

Principalele diferențe pot fi rezumate în tabel:

Proprietate Programare imperativă Programare declarativă
Focalizare Cum (secvența de pași) Ce (rezultatul dorit)
Flux de control Gestionat explicit de programator Ascuns sau abstractizat
Stare Este modificată activ Este mai puțin explicit modificată sau imuabilă
Exemple C, Java, Python (în principal), Go SQL, HTML, CSS, React (JSX)

În Go, se folosește mai frecvent stilul imperativ, dar conceptele de declarativitate apar în anumite abordări, de exemplu, la utilizarea bibliotecilor pentru manipularea datelor sau în descrierea configurațiilor.