Імперативний стиль програмування практикувався в веб-розробці з 2005 року аж до 2013 року.
За допомогою імперативного програмування ми виписали код, який перераховував саме те, що має робити наша програма, крок за кроком.
Функціональний стиль програмування створює абстракцію за допомогою розумних способів поєднання функцій.
У відповідях згадується декларативне програмування, і щодо цього я скажу, що декларативне програмування перелічує деякі правила, яких ми повинні дотримуватися. Потім ми надаємо те, що ми називаємо деяким початковим станом нашої програми, і дозволяємо цим правилам визначати, як поводиться програма.
Тепер ці швидкі описи, ймовірно, не мають великого сенсу, тому давайте переглянемо відмінності між імперативним та декларативним програмуванням, проходячи аналогією.
Уявіть, що ми не будуємо програмне забезпечення, а натомість печемо пиріжки на життя. Можливо, ми погані пекарі і не знаємо, як спекти смачний пиріг так, як слід.
Тож наш начальник дає нам список напрямків, які ми знаємо як рецепт.
Рецепт розповість, як зробити пиріг. Один рецепт написаний в обов'язковому стилі так:
- Змішайте 1 склянку борошна
- Додати 1 яйце
- Додати 1 склянку цукру
- Вилийте суміш у каструлю
- Поставте каструлю в духовку на 30 хвилин і 350 градусів.
Декларативний рецепт робив би наступне:
1 склянка борошна, 1 яйце, 1 склянка цукру - початковий стан
Правила
- Якщо все змішалося, покладіть в каструлю.
- Якщо все не змішано, покладіть в миску.
- Якщо все в каструлі, поставте в духовку.
Тож імперативні підходи характеризуються поетапними підходами. Ви починаєте з першого кроку і переходите до кроку 2 тощо.
Ви врешті-решт отримаєте якийсь кінцевий продукт. Таким чином, роблячи цей пиріг, ми беремо ці інгредієнти, перемішуємо їх, кладемо в сковороду і духовку, і ви отримали свій кінцевий продукт.
У декларативному світі його різні. У декларативному рецепті ми розділимо наш рецепт на дві окремі частини, почніть з однієї частини, яка перераховує початковий стан рецепта, як і змінні. Отже, наші змінні тут - кількість наших інгредієнтів та їх тип.
Ми беремо початковий стан або початкові інгредієнти і застосовуємо до них деякі правила.
Отже, ми приймаємо початковий стан і знову і знову передаємо їх цим правилам, поки не отримаємо готовий з'їсти полуничний пиріг з ревеню чи що завгодно.
Тож у декларативному підході ми повинні знати, як правильно структурувати ці правила.
Тож правила, які ми можемо захотіти вивчити наші інгредієнти або стан, якщо їх змішати, покладіть їх у сковороду.
З нашим початковим станом це не відповідає, оскільки ми ще не змішали наші інгредієнти.
Отже, правило 2 говорить, якщо вони не змішалися, то перемішайте їх у мисці. Гаразд, так це правило застосовується.
Зараз у нас є миска із змішаними інгредієнтами як наша держава.
Тепер ми знову застосовуємо цю нову державу до наших правил.
Отже, правило 1 говорить, якщо інгредієнти змішані, помістіть їх у сковороду, добре, так, зараз правило 1 діє, давайте це робити.
Зараз у нас є цей новий стан, коли інгредієнти змішуються і на сковороді. Правило 1 більше не актуальне, правило 2 не застосовується.
Правило 3 говорить, що якщо інгредієнти знаходяться на сковороді, помістіть їх у духовку, чудово, що це правило - це те, що стосується цього нового стану, давайте це робити.
І закінчуємо смачним гарячим яблучним пирогом чи чим завгодно.
Тепер, якщо ти схожий на мене, ти можеш задуматися, чому ми все ще не робимо імперативного програмування. Це має сенс.
Що ж, для простих потоків - так, але більшість веб-додатків мають більш складні потоки, які неможливо належним чином зафіксувати в обов'язковому порядку.
У декларативному підході ми можемо мати деякі початкові інгредієнти або початковий стан, наприклад textInput=“”
, одну змінну.
Можливо, введення тексту починається як порожній рядок.
Ми приймаємо цей початковий стан і застосовуємо його до набору правил, визначених у вашій заявці.
Якщо користувач вводить текст, оновіть введення тексту. Ну, зараз це не стосується.
Якщо шаблон наданий, обчисліть віджет.
- Якщо textInput оновлено, повторіть шаблон.
Ну, нічого з цього не застосовується, тому програма просто чекатиме, коли подія станеться.
Тож у якийсь момент користувач оновлює введення тексту, і тоді ми можемо застосувати правило №1.
Ми можемо оновити це до “abcd”
Таким чином, ми просто оновили наш текст та оновлення textInput, правило № 2 не застосовується, правило № 3 говорить, якщо введення тексту оновлено, що щойно відбулося, потім повторно візуалізуємо шаблон, а потім повертаємося до правила 2, що говорить, якщо шаблон зроблений , обчисліть віджет, добре давайте розрахувати віджет.
Загалом, як програмісти, ми хочемо прагнути до декларативніших програм програмування.
Імператив здається більш зрозумілим і очевидним, але декларативний підхід дуже добре масштабується для більш великих застосувань.