В чем разница между парадигмами декларативного и процедурного программирования? Не могли бы вы привести несколько примеров?
Какие еще существуют парадигмы программирования?
Ответы:
Есть несколько подпарадигм парадигмы императивного программирования, таких как парадигмы процедурного или объектно-ориентированного программирования.
В парадигме императивного программирования алгоритм описывается поэтапно с различной степенью абстракции.
Примеры языков программирования, поддерживающих процедурную парадигму:
Обычно это относится к языкам, которые демонстрируют иерархию типов, которые наследуют как методы, так и состояние от базовых типов к производным типам, но также включают необычный основанный на прототипах JavaScript.
Примеры языков программирования, поддерживающих объектно-ориентированную парадигму:
Есть несколько подпарадигм парадигмы декларативного программирования, таких как парадигмы функционального или логического программирования.
В парадигме декларативного программирования вы описываете результат или цель и получаете их через « черный ящик ». Противоположность императиву.
Примеры языков программирования, поддерживающих парадигму декларативного программирования:
Функциональное программирование делает упор на применение функций без побочных эффектов и без изменяемого состояния. Вышеописанные декларативные системы демонстрируют определенные аспекты функционального программирования.
Примеры языков программирования, поддерживающих декларативную функциональную парадигму:
Декларативное программирование - это когда вы говорите то, что хотите, не говоря, как это сделать. При процедурном программировании вы должны указать точные шаги, чтобы получить результат.
Например, SQL является более декларативным, чем процедурным, потому что в запросах не указываются шаги для получения результата.
Приведу реальный пример: мне нужна чашка чая.
Процедурные:
Декларативная:
На процедурном языке вы определяете весь процесс и предоставляете шаги, как это сделать. Вы просто предоставляете заказы и определяете, как процесс будет обслуживаться.
На декларативном языке вы просто устанавливаете команду или порядок и позволяете системе решать, как выполнить этот заказ. Вам просто нужен результат, а не разбираться в том, как это делать.
Процедурное программирование:
В процедурном программировании, когда программа запускается, она следует набору инструкций. Инструкции могут изменяться в зависимости от содержимого файла или памяти, но в целом они не сильно различаются. входные данные в программу обычно поступают не из пользовательского ввода в реальном времени, а из заранее собранного набора данных.
Декларативное программирование:
В программировании, управляемом декларативными событиями, происходит централизация массива данных с дополнительными действиями, которые программа может предпринять с ними. Например, каждое «событие» в текстовом процессоре - это любые изменения мыши или клавиатуры (или файла), которые влияют на данные, документ (ы). Их не нужно выполнять ни в каком порядке. Программирование, управляемое событиями, принимает форму небольших программ (обработчиков событий), которые работают с общим набором данных, так что каждая небольшая программа может использовать одни и те же данные, документ в этом примере.
Основное различие между двумя языками программирования заключается в том, что в процедурном программировании мы сообщаем компьютеру, как решить проблему, а в декларативном программировании мы сообщаем компьютеру, какую проблему мы хотим решить.
Чтобы обратиться к доступному комментарию и, возможно, предоставить пример различий между ними. Ansible является процедурным, в то время как что-то вроде puppet или terraform декларативно. Например, вы создаете доступный файл yaml для развертывания 10 экземпляров ec2 следующим образом:
-ec2: count: 10 image: ami-058c6e5b73b074cd2 instance_type: t2.micro
Если бы вы дважды запускали этот файл, у вас бы получилось 20 экземпляров t2.micro ec2. Если бы вы написали эквивалент на декларативном языке, таком как terraform, и запустили его дважды, у вас будет запущено только 10 экземпляров t2.micro независимо от того, сколько раз вы его запускали. Декларативные языки определяют конечное состояние. Процедурные языки просто делают то, что вы им говорите, независимо от текущего или прошлого состояния.
Итак, YAML - это декларативный язык программирования? Потому что мы определяем то, что хотим, вместо того, чтобы писать фактическую логику.
Я спрашиваю об этом, потому что, если кто-то знает Ansible, который является инструментом управления конфигурацией, он использует YAML, но по-прежнему попадает в категорию процедурного языка.
При процедурном подходе вы кодируете свою инструкцию для достижения результата. При декларативном подходе вы определяете, что необходимо решить, как знание решения проблемы. Взгляните на пример процедурного или декларативного подхода, который я реализовал в обоих подходах.
Как вы увидите в примере, при декларативном подходе вам не нужно указывать, КАК решить проблему.