Sobes.tech
Junior

Каква е разликата между императивното и декларативното програмиране?

sobes.tech AI

Отговор от AI

Императивното програмиране описва как да направиш нещо, като посочва последователност от стъпки. Декларативното програмиране описва какво трябва да се направи, без да навлиза в детайли за реализацията.

  • Императивно: Фокусира се върху потока на управление и промените в състоянието на програмата. Казваш на компютъра, как да премине от едно състояние в друго.
  • Декларативно: Фокусира се върху логиката на изчисленията, без да описва явно потока на управление. Казваш на компютъра, какво искаш да постигнеш.

Примери:

  • Императивен подход за намиране на четни числа в слайс:

    // Императивен подход
    func findEvenImperative(nums []int) []int {
    	var evenNums [] // Деклариране на променлива за резултата
    	for _, num := range nums { // Обхождане на елементите
    		if num%2 == 0 { // Проверка на условието
    			evenNums = append(evenNums, num) // Добавяне към резултата
    		}
    	}
    	return evenNums // Връщане на резултата
    }
    
  • Декларативен подход (например с използване на SQL, който е по своята природа декларативен):

    Въпреки че Golang е в голяма степен императивен, идеята за декларативност се илюстрира с пример за заявка към база данни:

    -- Декларативен подход (SQL)
    SELECT *
    FROM numbers
    WHERE number % 2 = 0;
    

    Тук просто декларираме, че искаме да получим всички редове от таблицата numbers, където number е четно, без да описваме как точно базата данни трябва да го направи (например, кой алгоритъм за търсене или филтриране да използва).

Основните разлики могат да бъдат обобщени в таблица:

Свойство Императивно програмиране Декларативно програмиране
Фокус Как (последователност от стъпки) Какво (желаният резултат)
Поток на управление Явно управляван от програмиста Скрит или абстрахиран
Състояние Активно се променя По-малко явно се променя или е неизменяемо
Примери C, Java, Python (главно), Go SQL, HTML, CSS, React (JSX)

В Go по-често се използва императивен стил, но концепциите за декларативност се появяват в определени подходи, например при използване на библиотеки за работа с данни или при описване на конфигурации.