HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>6 янв 2020</li>
2 <ul><li>6 янв 2020</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><h2>Что такое парадигмы программирования и зачем они нужны</h2>
4 </ul><h2>Что такое парадигмы программирования и зачем они нужны</h2>
5 <p>Знакомство с новыми парадигмами программирования может перевернуть вашу точку зрения на написание кода. Рассказываем, что это такое.</p>
5 <p>Знакомство с новыми парадигмами программирования может перевернуть вашу точку зрения на написание кода. Рассказываем, что это такое.</p>
6 <p> vlada_maestro / shutterstock</p>
6 <p> vlada_maestro / shutterstock</p>
7 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
7 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
8 <p>Парадигма программирования - это набор идей и понятий, которые определяют стиль написания программ, подход к программированию. Существует множество разных парадигм, но чаще всего используются императивная и декларативная, практически противоположные друг другу.</p>
8 <p>Парадигма программирования - это набор идей и понятий, которые определяют стиль написания программ, подход к программированию. Существует множество разных парадигм, но чаще всего используются императивная и декларативная, практически противоположные друг другу.</p>
9 <p>В императивной<em>(англ. imperative - приказ)</em>парадигме разработчик пишет для компьютера инструкции, которым тот следует. Инструкции могут быть следующие:</p>
9 <p>В императивной<em>(англ. imperative - приказ)</em>парадигме разработчик пишет для компьютера инструкции, которым тот следует. Инструкции могут быть следующие:</p>
10 <ul><li>сложи два числа;</li>
10 <ul><li>сложи два числа;</li>
11 <li>если<em>а</em>, то сделай<em>б</em>, а иначе сделай<em>в</em>;</li>
11 <li>если<em>а</em>, то сделай<em>б</em>, а иначе сделай<em>в</em>;</li>
12 <li>отправь запрос на сервер;</li>
12 <li>отправь запрос на сервер;</li>
13 <li>открой файл;</li>
13 <li>открой файл;</li>
14 <li>выведи строку.</li>
14 <li>выведи строку.</li>
15 </ul><p>То есть программист говорит, что нужно сделать и в каком порядке, а компьютер выполняет приказы.</p>
15 </ul><p>То есть программист говорит, что нужно сделать и в каком порядке, а компьютер выполняет приказы.</p>
16 <p>Отличительная черта императивной парадигмы - понятие состояния компьютера или программы. Состояние - это совокупность всех данных в определённый момент времени: переменных, массивов, счётчиков и так далее.</p>
16 <p>Отличительная черта императивной парадигмы - понятие состояния компьютера или программы. Состояние - это совокупность всех данных в определённый момент времени: переменных, массивов, счётчиков и так далее.</p>
17 <p>К императивной парадигме относятся следующие виды программирования:</p>
17 <p>К императивной парадигме относятся следующие виды программирования:</p>
18 <ul><li>процедурное;</li>
18 <ul><li>процедурное;</li>
19 <li>структурное;</li>
19 <li>структурное;</li>
20 <li>аспектно-ориентированное;</li>
20 <li>аспектно-ориентированное;</li>
21 <li>объектно-ориентированное и другие.</li>
21 <li>объектно-ориентированное и другие.</li>
22 </ul><p>Также императивную парадигму программирования можно считать более низкоуровневой, потому что программисту нужно знать, как работают программы.</p>
22 </ul><p>Также императивную парадигму программирования можно считать более низкоуровневой, потому что программисту нужно знать, как работают программы.</p>
23 <p>В декларативной парадигме разработчик описывает проблему и ожидаемый результат, но не пишет никаких инструкций. В декларативном программировании отсутствуют переменные, состояние и прочие понятия, которые свойственны императивной парадигме.</p>
23 <p>В декларативной парадигме разработчик описывает проблему и ожидаемый результат, но не пишет никаких инструкций. В декларативном программировании отсутствуют переменные, состояние и прочие понятия, которые свойственны императивной парадигме.</p>
24 <p>К декларативной парадигме относятся функциональное и логическое программирование.</p>
24 <p>К декларативной парадигме относятся функциональное и логическое программирование.</p>
25 <p>Допустим, у нас есть массив следующих чисел:</p>
25 <p>Допустим, у нас есть массив следующих чисел:</p>
26 5, 1, 3, 9, 12, 583, 998, 7538, 72, 53, 71, 85, 7, 2, 9<p>Нам может понадобиться получить из этого массива все числа, которые больше<em>3</em>, но меньше<em>100</em>.</p>
26 5, 1, 3, 9, 12, 583, 998, 7538, 72, 53, 71, 85, 7, 2, 9<p>Нам может понадобиться получить из этого массива все числа, которые больше<em>3</em>, но меньше<em>100</em>.</p>
27 <p>В декларативном программировании разработчик просто пишет следующее:</p>
27 <p>В декларативном программировании разработчик просто пишет следующее:</p>
28 Получить из массива N все числа, которые больше 3 и меньше 100<p>Программист не думает о том, как программа будет искать эти числа, он просто пишет, какой результат ему нужен.</p>
28 Получить из массива N все числа, которые больше 3 и меньше 100<p>Программист не думает о том, как программа будет искать эти числа, он просто пишет, какой результат ему нужен.</p>
29 <p>В императивном программировании придётся самостоятельно написать код, который будет проверять все числа из массива<em>N</em>на соответствие условию и, если они подходят, записывать их в новый массив. То есть код будет выглядеть примерно так:</p>
29 <p>В императивном программировании придётся самостоятельно написать код, который будет проверять все числа из массива<em>N</em>на соответствие условию и, если они подходят, записывать их в новый массив. То есть код будет выглядеть примерно так:</p>
30 Создать массив N с числами …; объявить переменную i со значением 0; Начало цикла: Если значение элемента номер i больше 3 и меньше 100, то добавить его в массив N2; Прибавить к переменной i единицу; Повторять, пока значение переменной i меньше количества элементов массива N; Конец цикла; Вернуть массив N2;<p>То есть в декларативном программировании разработчик говорит, что ему нужно. А в императивном - как это можно получить.</p>
30 Создать массив N с числами …; объявить переменную i со значением 0; Начало цикла: Если значение элемента номер i больше 3 и меньше 100, то добавить его в массив N2; Прибавить к переменной i единицу; Повторять, пока значение переменной i меньше количества элементов массива N; Конец цикла; Вернуть массив N2;<p>То есть в декларативном программировании разработчик говорит, что ему нужно. А в императивном - как это можно получить.</p>
31 <p>Давайте рассмотрим это на примере двух реальных языков:</p>
31 <p>Давайте рассмотрим это на примере двух реальных языков:</p>
32 <strong>C# (императивный)</strong><strong>SQL (декларативный)</strong>int[] N = new int[] { 5, 1, 3, 9, 12, 583, 998, 7538, 72, 53, 71, 85, 7, 2, 9 };<p>List&lt;int&gt; nums = new List&lt;int&gt;();</p>
32 <strong>C# (императивный)</strong><strong>SQL (декларативный)</strong>int[] N = new int[] { 5, 1, 3, 9, 12, 583, 998, 7538, 72, 53, 71, 85, 7, 2, 9 };<p>List&lt;int&gt; nums = new List&lt;int&gt;();</p>
33 <p>for(int i = 0; i &lt; N.Length; i++)</p>
33 <p>for(int i = 0; i &lt; N.Length; i++)</p>
34 <p>{</p>
34 <p>{</p>
35 <p>if(N[i] &gt; 3 &amp;&amp; N[i] &lt; 100)</p>
35 <p>if(N[i] &gt; 3 &amp;&amp; N[i] &lt; 100)</p>
36 <p>{</p>
36 <p>{</p>
37 <p>nums.Add(N[i]);</p>
37 <p>nums.Add(N[i]);</p>
38 <p>}</p>
38 <p>}</p>
39 <p>}</p>
39 <p>}</p>
40 <p>int[] N2 = nums.ToArray();</p>
40 <p>int[] N2 = nums.ToArray();</p>
41 SELECT num FROM N WHERE num &gt; 3 AND num &lt; 100;<p>У вас мог появиться вполне логичный вопрос:</p>
41 SELECT num FROM N WHERE num &gt; 3 AND num &lt; 100;<p>У вас мог появиться вполне логичный вопрос:</p>
42 <p>Есть несколько причин.</p>
42 <p>Есть несколько причин.</p>
43 <p><strong>Во-первых,</strong>декларативное программирование - это обёртка для императивного. Компьютер не может вот так просто понять, чего хочет программист, поэтому для него нужно написать конкретные инструкции, что и в каком порядке делать.</p>
43 <p><strong>Во-первых,</strong>декларативное программирование - это обёртка для императивного. Компьютер не может вот так просто понять, чего хочет программист, поэтому для него нужно написать конкретные инструкции, что и в каком порядке делать.</p>
44 <p>Когда вы пишете запрос в SQL, его выполнение происходит по заранее описанным инструкциям. Поэтому нам нужно императивное программирование, чтобы заставить работать декларативное.</p>
44 <p>Когда вы пишете запрос в SQL, его выполнение происходит по заранее описанным инструкциям. Поэтому нам нужно императивное программирование, чтобы заставить работать декларативное.</p>
45 <p><strong>Во-вторых,</strong>декларативное программирование не подходит для задач, для решения которых важно иметь доступ к состоянию программы - например, если нужно проверить, нажата ли кнопка или поставлена ли галочка в чекбокс.</p>
45 <p><strong>Во-вторых,</strong>декларативное программирование не подходит для задач, для решения которых важно иметь доступ к состоянию программы - например, если нужно проверить, нажата ли кнопка или поставлена ли галочка в чекбокс.</p>
46 <p>В декларативном программировании нельзя отследить ни само состояние, ни его изменение, поэтому не получится указать, что должно происходить в ответ на действия пользователя.</p>
46 <p>В декларативном программировании нельзя отследить ни само состояние, ни его изменение, поэтому не получится указать, что должно происходить в ответ на действия пользователя.</p>
47 <p><strong>В-третьих,</strong>императивное программирование даёт больше свободы, поэтому его чаще используют в творческих областях, особенно там, где важен порядок выполняемых действий.</p>
47 <p><strong>В-третьих,</strong>императивное программирование даёт больше свободы, поэтому его чаще используют в творческих областях, особенно там, где важен порядок выполняемых действий.</p>
48 <p>Каждая парадигма подходит для определённых задач: императивная лучше для работы с анимацией, графическими интерфейсами, скриптами, играми и многим другим, а декларативная - для вычислений и работы с данными. Поэтому вопрос "Какая парадигма лучше?" некорректен: они все хороши, если использовать их по назначению.</p>
48 <p>Каждая парадигма подходит для определённых задач: императивная лучше для работы с анимацией, графическими интерфейсами, скриптами, играми и многим другим, а декларативная - для вычислений и работы с данными. Поэтому вопрос "Какая парадигма лучше?" некорректен: они все хороши, если использовать их по назначению.</p>
49 <p>Большинство языков поддерживают обе парадигмы, но заточены под одну из них. Один из таких языков -<em>C#</em>. Несмотря на то что это объектно-ориентированный язык программирования<em>(императивная парадигма)</em>, в нём присутствуют элементы функциональной разработки<em>(декларативная разработка).</em></p>
49 <p>Большинство языков поддерживают обе парадигмы, но заточены под одну из них. Один из таких языков -<em>C#</em>. Несмотря на то что это объектно-ориентированный язык программирования<em>(императивная парадигма)</em>, в нём присутствуют элементы функциональной разработки<em>(декларативная разработка).</em></p>
50 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
50 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>