Код
#статьи

Что такое парадигмы программирования и зачем они нужны

Знакомство с новыми парадигмами программирования может перевернуть вашу точку зрения на написание кода. Рассказываем, что это такое.

 vlada_maestro / shutterstock

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

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

В императивной (англ. imperative — приказ) парадигме разработчик пишет для компьютера инструкции, которым тот следует. Инструкции могут быть следующие:

  • сложи два числа;
  • если а, то сделай б, а иначе сделай в;
  • отправь запрос на сервер;
  • открой файл;
  • выведи строку.

То есть программист говорит, что нужно сделать и в каком порядке, а компьютер выполняет приказы.

Отличительная черта императивной парадигмы — понятие состояния компьютера или программы. Состояние — это совокупность всех данных в определённый момент времени: переменных, массивов, счётчиков и так далее.

К императивной парадигме относятся следующие виды программирования:

  • процедурное;
  • структурное;
  • аспектно-ориентированное;
  • объектно-ориентированное и другие.

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

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

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

К декларативной парадигме относятся функциональное и логическое программирование.

Примеры использования парадигм

Допустим, у нас есть массив следующих чисел:

5, 1, 3, 9, 12, 583, 998, 7538, 72, 53, 71, 85, 7, 2, 9

Нам может понадобиться получить из этого массива все числа, которые больше 3, но меньше 100.

В декларативном программировании разработчик просто пишет следующее:

Получить из массива N все числа, которые больше 3 и меньше 100

Программист не думает о том, как программа будет искать эти числа, он просто пишет, какой результат ему нужен.

В императивном программировании придётся самостоятельно написать код, который будет проверять все числа из массива N на соответствие условию и, если они подходят, записывать их в новый массив. То есть код будет выглядеть примерно так:

Создать массив N с числами …;
объявить переменную i со значением 0;
Начало цикла:
Если значение элемента номер i больше 3 и меньше 100, то добавить его в массив N2;
Прибавить к переменной i единицу;
	Повторять, пока значение переменной i меньше количества элементов массива N;
Конец цикла;
Вернуть массив N2;

То есть в декларативном программировании разработчик говорит, что ему нужно. А в императивном — как это можно получить.

Давайте рассмотрим это на примере двух реальных языков:

C# (императивный) SQL (декларативный)
int[] N = new int[] { 5, 1, 3, 9, 12, 583, 998, 7538, 72, 53, 71, 85, 7, 2, 9 };

List<int> nums = new List<int>();

for(int i = 0; i < N.Length; i++)

{

if(N[i] > 3 && N[i] < 100)

{

nums.Add(N[i]);

}

}

int[] N2 = nums.ToArray();
SELECT num FROM N WHERE num > 3 AND num < 100;

Зачем это нужно

У вас мог появиться вполне логичный вопрос:

Зачем использовать императивное программирование, если декларативное позволяет писать гораздо меньше кода?

Есть несколько причин.

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

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

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

В декларативном программировании нельзя отследить ни само состояние, ни его изменение, поэтому не получится указать, что должно происходить в ответ на действия пользователя.

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

Каждая парадигма подходит для определённых задач: императивная лучше для работы с анимацией, графическими интерфейсами, скриптами, играми и многим другим, а декларативная — для вычислений и работы с данными. Поэтому вопрос «Какая парадигма лучше?» некорректен: они все хороши, если использовать их по назначению.

Заключение

Большинство языков поддерживают обе парадигмы, но заточены под одну из них. Один из таких языков — C#. Несмотря на то что это объектно-ориентированный язык программирования (императивная парадигма), в нём присутствуют элементы функциональной разработки (декларативная разработка).

Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована