Імператив проти декларативного програмування - різниця, пояснена простою англійською мовою

Як інструктор кодування, мій обов'язок - відправити програмістів у світ, думаючи по-новому. Основний зсув у мисленні відбувається, коли ми переходимо від імперативного до декларативного програмування.

Як тільки мої студенти вивчать базовий JavaScript, ми переглядаємо функціональне програмування та методи масивів, що використовуються в декларативному стилі кодування. Тут їхній мозок починає хлюпати і шипіти і танути, як зефір над вогнем.

Що таке імперативне програмування?

Як початківець, ви, мабуть, кодували переважно в імперативному стилі: ви даєте комп’ютеру набір інструкцій, яких слід дотримуватися, і комп’ютер робить те, що ви хочете, у простій послідовності.

Уявіть, у нас є список найбільш часто використовуваних паролів у світі:

const passwords = [ "123456", "password", "admin", "freecodecamp", "mypassword123", ];

Наш додаток збирається перевірити пароль користувача під час реєстрації та не дозволити йому створювати пароль із цього списку.

Але перш ніж це зробити, ми хочемо уточнити цей список. У нас уже є код, який не дозволяє користувачеві зареєструватися з паролем довжиною менше 9 символів. Тож ми можемо скоротити цей список лише до паролів довжиною до 9 символів, щоб пришвидшити нашу перевірку.

В обов’язковому порядку ми б написали:

// using the passwords constant from above let longPasswords = []; for (let i = 0; i = 9) { longPasswords.push(password); } } console.log(longPasswords); // logs ["freecodecamp", "mypassword123"];
  1. Створюємо порожній список з назвою longPasswords.
  2. Потім ми пишемо цикл, який запускатиметься стільки разів, скільки паролів у вихідному passwordsсписку.
  3. Тоді ми отримуємо пароль за індексом ітерації циклу, на якій ми перебуваємо в даний час.
  4. Потім ми перевіряємо, чи довший цей пароль або дорівнює 9 символам.
  5. Якщо так, ми вносимо його до longPasswordsсписку.

Однією з сильних сторін програмування є той факт, що про це легко міркувати. Як і комп’ютер, ми можемо крокувати за кроком.

Що таке декларативне програмування?

Але існує інший спосіб думати про кодування - як про процес постійного визначення того, що є. Це називається декларативним програмуванням.

Імперативне та декларативне програмування досягають однакових цілей. Це просто різні способи мислення про код. Вони мають свої переваги та недоліки, і є час використовувати обидва.

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

Тому замість того, щоб давати комп’ютеру покрокові вказівки, ми заявляємо, що саме ми хочемо, і призначаємо це результату якогось процесу.

// using the passwords constant from above const longPasswords = passwords.filter(password => password.length >= 9); console.log(longPasswords); // logs ["freecodecamp", "mypassword123"];

Список longPasswordsвизначається (або оголошується) як список passwordsвідфільтрованих лише для паролів, що перевищують або дорівнюють 9 символам.

Функціональні методи програмування в JavaScript дозволяють нам чітко декларувати речі.

  • Це список паролів.
  • Це список лише довгих паролів. (Після запуску filter.)
  • Це список паролів з ідентифікаторами. (Після запуску map.)
  • Це єдиний пароль. (Після запуску find.)

Однією з сильних сторін декларативного програмування є те, що воно змушує нас запитати, що ми хочемо спочатку. Саме в іменуванні цих нових речей наш код стає виразним та явним.

І коли наші колеги-розробники приходять і дивляться на наш код, вони можуть легше знаходити помилки:

"Ви називаєте цю змінну" index ", що змушує мене очікувати число, але я бачу, що це результат, filterякий повертає масив. Що з цим? "

Я закликаю тих, хто навчається, писати декларативний код якомога частіше, постійно визначаючи (і переробляючи, щоб перевизначити), що це таке.

Замість того , щоб тримати весь імперативний процес у вашій голові, ви можете провести більш відчутну річ у вашій голові з чітким визначенням.

Майк Цетлов - провідний інструктор 10x Code Camp .