Декларативное и императивное программирование: 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

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

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

  • 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;
}

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

В отличие от императивного программирования, декларативное программирование описывает то, чего вы хотите от программы, а не то, как она должна работать.

Другими словами, в рамках декларативной парадигмы вы определяете результаты, которые вы хотите получить от программы, не описывая ее поток управления. В конечном счете, реализация языка программирования и компилятор должны определить, как достичь результатов. Это делает акцент не на процессе выполнения, а на результатах и ​​их связи с вашей общей целью. Другими словами, написание декларативного кода заставляет вас сначала спросить, чего вы хотите от своей программы. Определение этого поможет вам разработать более выразительный и явный код.

Возвращаясь к нашему примеру с погодным приложением, псевдокод может выглядеть примерно так в декларативной парадигме:

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 ключевых отличий

Давайте подробнее рассмотрим различия между двумя обсуждаемыми нами парадигмами программирования, используя для сравнения следующую таблицу.

Императивное программирование

Декларативное программирование

1. Расчет
Вы описываете пошаговые инструкции того, как исполняемая программа достигает желаемых результатов. Вы устанавливаете условия, запускающие выполнение программы для получения желаемых результатов.
2. Читабельность и сложность
Акцентируя внимание на потоке управления, вы можете довольно легко следовать пошаговому процессу. Однако по мере того, как вы добавляете в свою программу дополнительные функции и код, она может становиться длиннее и сложнее, что делает ее все более запутанной и трудоемкой для чтения. Пошаговые процессы избегаются. Вы обнаружите, что эта парадигма менее сложна и требует меньше кода, что упрощает ее чтение.
3. Настройка
Предлагается простой способ настройки и редактирования кода и структуры. У вас есть полный контроль и вы можете легко адаптировать структуру вашей программы к вашим потребностям. Однако, поскольку вам, возможно, придется иметь дело с большим количеством кода, вы с большей вероятностью столкнетесь с ошибками редактирования, чем при декларативном программировании. Настройка исходного кода затруднена из-за сложного синтаксиса и зависимости парадигмы от реализации предварительно настроенного алгоритма. Некоторые программы декларативного программирования могут потребовать большей специфичности для выполнения сложных алгоритмов и функций.
4. Оптимизация
Добавление расширений и создание обновлений поддерживаются, но это значительно сложнее, чем при декларативном программировании, что усложняет оптимизацию. Это связано с пошаговой структурой парадигмы и тем фактом, что для обработки простых задач требуется больше кода. Чем длиннее код, тем больше вероятность того, что вы столкнетесь с ошибками. Вы можете легко оптимизировать код, потому что алгоритм управляет реализацией. Кроме того, вы можете добавлять расширения и делать обновления.
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)

В этом примере мы создали переменную с именем totalи присвоили ей значение 0. Мы также создали список чисел, myListкоторые мы хотим добавить к сумме.

Затем мы создали цикл for для доступа к каждому элементу в списке по отдельности и добавления его к общему количеству. Наконец, мы использовали функцию печати, чтобы отобразить наш окончательный ответ (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)

Как видите, структура кода в этом примере более лаконичная. В отличие от примера императивного программирования, мы не описывали шаги. Вместо того, чтобы использовать цикл для перебора всего нашего списка, мы использовали sum()метод, который нам подходит.

Другими словами, вы можете прочитать декларативный код Python как нахождение суммы всех чисел в нашем списке. Вам важен только результат, а не процесс.

Заключение

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

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

Читайте также:  Как быстро запустить проект и приложение Django?
Оцените статью
bestprogrammer.ru
Добавить комментарий