Императивное и декларативное программирование — две наиболее популярные парадигмы программирования в разработке программного обеспечения. Парадигмы программирования — это подходы, используемые для категоризации или классификации языков программирования на основе техник и возможностей, которые они поддерживают.
Когда вы начинаете учиться кодировать, вы часто начинаете с освоения таких конструкций, как циклы, функции, ключевые слова и т.д. Хотя их изучение жизненно необходимо, начинающие программисты иногда не уделяют должного внимания применению этих конструкций для кодирования решений и их структурированию таким образом, который может помочь вам в решении реальных проблем. Изучение парадигм программирования может помочь устранить этот пробел.
Сегодня мы рассмотрим декларативное и императивное программирование и их различия. К концу у вас должно быть прочное базовое понимание обеих парадигм, подкрепленное парой примеров кода.
Давайте приступим!
Мы рассмотрим:
- Что такое императивное программирование?
- Что такое декларативное программирование?
- Императивное и декларативное программирование: 5 ключевых различий
- Декларативное и императивное программирование: Пример кода
- Начните изучать декларативное и императивное программирование уже сегодня
- Что такое императивное программирование?
- Поддержка обеих парадигм
- Что такое декларативное программирование?
- Декларативное и императивное программирование: 5 ключевых различий
- Декларативное и императивное программирование: Пример кода
- Императивное программирование
- Декларативное программирование
- Начните работать с декларативным и императивным программированием уже сегодня
- Продолжайте изучать языки программирования на сайте Educative
- Начните обсуждение
Что такое императивное программирование?
Императивное программирование — это самый старый и самый базовый подход к программированию. В рамках императивной парадигмы код описывает пошаговый процесс выполнения программы. Поэтому новичкам часто легче рассуждать с императивным кодом, следуя за шагами процесса.
Пошаговый процесс содержит отдельные утверждения, инструкции или вызовы функций. В мире программирования этот процесс называется потоком управления.
Другими словами, вас интересует, как выполняется программа, и вы даете ей явные инструкции. Давайте проиллюстрируем это на примере псевдокода.
Допустим, вы хотите создать приложение, которое будет возвращать текущую погоду и прогноз для определенного места. На высоком уровне, используя императивный подход, вы можете спроектировать приложение следующим образом:
Begin
Accept location from user input of either location name or ZIP code.
Call OpenWeather's Geocoding API to convert location data into geographic coordinates.
Call OpenWeather's Current Weather Data API.
Send geographic coordinates to OpenWeather.
Call OpenWeather's Daily Forecast 16 Days API.
Resend geographic coordinates.
Parse JSON returned by the APIs to extract current weather and forecast data.
Return current weather and forecast.
Display current weather and forecast to user.
End
В этом простом примере императивные инструкции диктуют, что должно делать приложение, когда это делать и как это делать. Этот псевдокод можно сравнить с императивным программированием, при котором вы создаете логику программы, делая циклические утверждения, вызывая функции и т.д. в определенном порядке.
Примерами императивных языков программирования являются:
- Java
- C
- Pascal
- Python
- Ruby
- Fortran
- PHP
Поддержка обеих парадигм
Вы можете использовать Python как в декларативном, так и в императивном программировании. С течением времени некоторые другие императивные языки также получили обновления, позволяющие им поддерживать программирование в декларативном стиле. К ним относятся JavaScript, C++ и C#.
В частности, C++ за последние годы получил несколько улучшений, многие из которых делают C++ более декларативным. Например, в новых версиях C++ есть стандартная библиотека шаблонов (STL), которая содержит четыре компонента: алгоритмы, контейнеры, функции и итераторы.
Среди этих компонентов есть несколько встроенных функций или операций, которые раньше выполнялись вручную, например, std::sort
и std::list
. Теперь вы можете легко использовать std::sort
и продолжать кодирование без необходимости разрабатывать императивный алгоритм сортировки.
Следующий пример кода демонстрирует эту возможность в действии:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[] = { 7, 5, 4, 9, 0, 1, 3, 8, 2, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
/*Array before sorting*/
for (int i = 0; i < n; i++) {
std::cout << arr[i] << ", ";
}
std::cout<<endl<<endl;
/*By default, "sort" takes two parameters, the beginning of the
array and the length of the array.*/
sort(arr, arr + n);
/*Array after sorting*/
for (int i = 0; i < n; i++) {
std::cout << arr[i] << ", ";
}
return 0;
}
--->
7, 5, 4, 9, 0, 1, 3, 8, 2, 6,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
Что такое декларативное программирование?
В отличие от императивного программирования, декларативное программирование описывает то, чего вы хотите добиться от программы, а не то, как она должна выполняться.
Другими словами, в рамках декларативной парадигмы вы определяете результаты, которых должна достичь программа, не описывая ее поток управления. В конечном итоге именно реализация языка программирования и компилятор определяют, как достичь этих результатов. При этом акцент делается не на процессе выполнения, а на результатах и их связи с вашей общей целью. Другими словами, написание декларативного кода заставляет вас сначала спросить, что вы хотите получить от своей программы. Определение этого поможет вам разработать более выразительный и явный код.
Возвращаясь к нашему примеру с погодным приложением, в декларативной парадигме псевдокод мог бы выглядеть примерно так:
Begin
Location submitted by user is location name or ZIP code.
Location is converted into geographic coordinates.
Weather data is retrieved for geographic coordinates.
Weather data is displayed for user.
End
Как показано на рисунке, псевдокод является описательным, но ему не хватает деталей. Для вас важен только результат — отображение данных о погоде — без учета процесса.
Примерами декларативных языков программирования являются:
- SQL
- Miranda
- Prolog
- Lisp
- Многие языки разметки (например, HTML).
Декларативное и императивное программирование: 5 ключевых различий
Давайте подробнее остановимся на различиях между двумя рассматриваемыми нами парадигмами программирования, используя для сравнения следующую таблицу.
Декларативное и императивное программирование: Пример кода
Мы обсудили ключевые различия между императивным и декларативным программированием. Давайте рассмотрим простой пример кода.
Для этого примера мы будем использовать Python. Как упоминалось ранее, Python может использоваться как в императивном, так и в декларативном программировании и является одним из самых популярных языков сегодня как для новичков, так и для экспертов.
Императивное программирование
# Calculate total in the list
total = 0
myList = [1,2,3,4,5]
# Create a for loop to add numbers in the list to the total
for x in myList:
total += x
print(total)
--->
15
В этом примере мы создали переменную total
и установили ее в значение 0
. Мы также создали список чисел myList
, которые мы хотим добавить к общему числу.
Далее мы создали цикл for, чтобы получить доступ к каждому элементу списка по отдельности и добавить его к итогу. Наконец, мы использовали функцию print, чтобы вывести окончательный ответ (15).
Этот код следует пошаговому процессу. На первой итерации мы прибавляем 1 к начальному итогу (0), чтобы получить новый итог (1). Затем цикл запускается снова, добавляя к 1 следующее число в нашем списке, чтобы получить новый итог (3). И так далее. Вы определили процесс, создав цикл, который итерирует весь список для выполнения задачи.
Этот процесс может занять много времени и становиться все более сложным по мере добавления функций и кода. Теперь давайте посмотрим, как можно достичь того же результата с помощью декларативного программирования.
Декларативное программирование
mylist = [1,2,3,4,5]
# set total to the sum of numbers in mylist
total = sum(mylist)
print(total)
--->
15
Как вы можете видеть, структура кода в этом примере более лаконична. В отличие от примера с императивным программированием, мы не стали описывать шаги. Вместо использования цикла для итерации по всему списку мы использовали метод sum()
, который нам подходит.
Другими словами, вы можете прочитать декларативный код Python как поиск суммы всех чисел в нашем списке. Вам важен только результат, а не процесс.
Начните работать с декларативным и императивным программированием уже сегодня
Сегодня мы рассмотрели основы императивного и декларативного программирования, а также их ключевые различия. В целом, вам будет проще использовать декларативное программирование для достижения желаемых результатов. Хотя императивное программирование легко изучить, управление базами кода, написанными с использованием императивной парадигмы, может стать сложным по мере добавления новых функций и кода. В то же время, вы сохраняете полный контроль, что позволяет вам больше настраивать свою программу.
По мере того как вы будете продолжать свой путь в программировании, вы захотите изучить особенности других парадигм под зонтиком императивного программирования, таких как процедурное программирование и объектно-ориентированное программирование. В рамках декларативного программирования дополнительные парадигмы включают функциональное программирование и логическое программирование.
Тем временем, если вы хотите начать свой путь в декларативном программировании, ознакомьтесь с курсом «Вводное руководство по SQL». Он охватывает создание, обновление и манипулирование базами данных для достижения нужных вам результатов, и все это в интерактивной практической среде.
Если вы предпочитаете начать с императивного программирования, мы рекомендуем вам курс «Python для программистов». Язык программирования Python широко популярен и может помочь вам получить преимущество на рынке труда.
Успешного обучения!
Продолжайте изучать языки программирования на сайте Educative
- Функциональное программирование против ООП: какую парадигму использовать
- Зачем изучать Python? 5 преимуществ и недостатков
- Какой язык программирования лучше всего изучать в первую очередь?
Начните обсуждение
Какой из двух языков вы предпочитаете? Была ли эта статья полезной? Дайте нам знать в комментариях ниже!