Императивное, декларативное и генеративное программирование.
Создатели фреймворка SwiftUI всегда подчёркивают, что он создан на основе парадигмы декларативного программирования. В отличие от предыдущего фреймворка UIKit, который характеризуется как пример императивного программирования.
Когда речь заходит о том, чем императивное программирование отличается от декларативного, то объяснение чаще всего сводится к тому, что при декларативном программировании разработчику нужно просто сказать, что ему нужно и SwiftUI это сделает. А если используется UIKit, то здесь типа надо все сделать самому.
Честно говоря, не очень внятное объяснение, поэтому попробую описать это различие сам на одном примере.
Итак, если в UIKit нам нужно вывести на экран список элементов, то мы используем TableView или CollectionView, которые уже подписаны на 2 протокола, а затем должны реализовать 3 метода: количество секций, количество строк в секциях, и в третьем методе скомпоновать ячейку и прописать загрузку в неё данных.
Та же задача в SwiftUI решается следующим образом:
List(items) { item in
Text(item.name
) }
Т.е., меньше кода, меньше времени тратится на реализацию задачи.
Можно, конечно, называть это декларативным программированием. Но можно считать это и следующим этапом развития высокоуровневого программирования. Когда-то программисты писали машинный код, потом языки программирования становились все более высокоуровневыми, все более понятными человеку. И вот теперь наступил новый этап, когда программирование стало ещё более высокоуровневым. Уже можно использовать более короткие высокоуровневые инструкции.
Наконец, самое интересное, что с этой же точки зрения можно рассматривать и программирование с помощью ИИ. Т.е., в тех же UIKit и SwiftUI, и в других языках программирования, разработчик пишет инструкции техническим языком, которые понятны в основном ему как человеку, но не очень понятны обычным людям. А теперь, в промтах, можно использовать уже и не технические инструкции.
Например, уже даже не надо писать команду List и т.д., а достаточно сказать ИИ "сделай список из таких-то элементов".
Таким образом, получается, что использование ИИ при написании кода - это следующий этап развития высокоуровневого программирования.
И поскольку ИИ везде называют генеративным, а его действия по написанию текстов, кода, созданию изображений и т.д., как генерация, то этот этап высокоуровневого программирования тоже можно назвать генеративным.
В итоге, получаем такую триаду:
Императивное программирование
Декларативное программирование
Генеративное программирование