Императивное программирование описывает как сделать что-то, указывая последовательность шагов. Декларативное программирование описывает что нужно сделать, не вдаваясь в детали реализации.
Примеры:
Императивный подход к поиску четных чисел в слайсе:
go
Декларативный подход (например, с использованием SQL, который декларативен по своей природе):
Хотя Golang сам по себе в значительной степени императивен, идея декларативности иллюстрируется на примере запроса к базе данных:
sql
Здесь мы просто декларируем, что хотим получить все строки из таблицы numbers, где number четное, не описывая, как именно база данных должна это сделать (например, какой алгоритм поиска или фильтрации использовать).
Основные отличия можно свести к таблице:
| Свойство | Императивное программирование | Декларативное программирование |
|---|---|---|
| Фокус | Как сделать (последовательность шагов) | Что сделать (желаемый результат) |
| Поток управления | Явно управляется программистом | Скрыт или абстрагирован |
| Состояние | Активно изменяется | Менее явно изменяется или неизменяемое |
| Примеры | C, Java, Python (в основном), Go | SQL, HTML, CSS, React (JSX) |
В Go чаще используется императивный стиль, но концепции декларативности появляются в определенных подходах, например, при использовании библиотек для работы с данными или в описании конфигураций.