Императивное и декларативное программирование — две самые популярные парадигмы программирования в разработке программного обеспечения. Парадигмы программирования – это подходы, используемые для категоризации или классификации языков программирования на основе методов и функций, которые они поддерживают.

Когда вы начинаете учиться кодировать, вы часто начинаете с освоения таких конструкций, как циклы, функции, ключевые слова и т. д. Хотя их изучение жизненно важно, новички иногда замечают, что меньше внимания уделяется применению этих конструкций к решениям по программированию и их структурированию. способами, которые могут помочь вам в решении реальных проблем. Изучение парадигм программирования может помочь преодолеть этот разрыв.

Сегодня мы рассмотрим декларативное и императивное программирование и их различия. К концу у вас должно быть прочное базовое понимание обеих парадигм, подкрепленное парой примеров кода.

Давайте начнем!

Мы расскажем:

  • Что такое императивное программирование?
  • Что такое декларативное программирование?
  • Императивное программирование против декларативного программирования: 5 ключевых отличий
  • Декларативное и императивное программирование: пример кода
  • Начните с декларативного и императивного программирования сегодня

Что такое императивное программирование?

Императивное программирование — самый старый и самый простой подход к программированию. В рамках императивной парадигмы код описывает пошаговый процесс выполнения программы. Из-за этого новичкам часто легче рассуждать с императивным кодом, следуя шагам процесса.

Пошаговый процесс содержит отдельные операторы, инструкции или вызовы функций. В мире программирования этот процесс называется поток управления.

Другими словами, вас интересует, как работает программа, и вы даете ей четкие инструкции. Проиллюстрируем это на примере псевдокода.

Предположим, вы хотите создать приложение, которое возвращает текущую погоду и прогноз для заданного местоположения. На высоком уровне вы можете спроектировать приложение так, чтобы оно работало примерно так при использовании императивного подхода:

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

В этом простом примере императивные инструкции определяют, что должно делать приложение, когда это делать и как это делать. Этот псевдокод сравним с императивным программированием, с помощью которого вы создаете логику программы, создавая операторы цикла, вызывая функции и т. д., и все это в определенном порядке.

Примеры императивных языков программирования включают:

  • Джава
  • C
  • Паскаль
  • питон
  • Рубин
  • Фортран
  • 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
  • Миранда
  • Пролог
  • Лисп
  • Многие языки разметки (например, 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 широко популярен и может помочь вам получить преимущество на рынке труда.

Удачного обучения!

Продолжайте изучать языки программирования на Образовательном

Начать обсуждение

Какой из двух вы предпочитаете? Была ли эта статья полезна? Дайте нам знать в комментариях ниже!