Императивно срещу декларативно програмиране - разликата, обяснена на обикновен английски

Като инструктор по кодиране, мое задължение е да изпратя програмисти по света да мислят по нови начини. Основна промяна в мисленето се случва, когато преминем от императивно към декларативно програмиране.

След като моите ученици са научили основен 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.)

Една от силните страни на декларативното програмиране е, че тя ни принуждава първо да попитаме какво искаме. Именно при именуването на тези нови неща нашият код става изразителен и изричен.

И когато нашите колеги разработчици се появят и разгледат нашия код, те могат да открият грешки по-лесно:

„Извиквате тази променлива„ индекс “, което ме кара да очаквам число, но виждам, че резултатът от filterтова връща масив. Какво става с това? "

Насърчавам учащите да пишат декларативен код възможно най-често, като непрекъснато дефинират (и рефакторинг, за да предефинират) какви са нещата.

Вместо да държите цял императивен процес в главата си, можете да държите по-осезаемо нещо в главата си с ясна дефиниция.

Майк Зетлоу е водещ инструктор в 10x Code Camp .