Imperativno vs deklarativno programiranje - razlika objašnjena običnim engleskim jezikom

Kao instruktor kodiranja, moja je dužnost poslati programera u svijet koji razmišljaju na nove načine. Veliki pomak u razmišljanju događa se kada s imperativa prijeđemo na deklarativno programiranje.

Nakon što moji studenti nauče osnovni JavaScript, prelazimo na funkcionalno programiranje i metode niza koje se koriste u deklarativnom stilu kodiranja. Tu im mozak počne pucati i cvrčati te se topiti poput bijelog sljeza nad vatrom.

Što je imperativno programiranje?

Kao početnik, vjerojatno ste uglavnom kodirali u imperativnom stilu: računalu dajete niz uputa koje treba slijediti, a računalo radi ono što želite u jednostavnom slijedu.

Zamislite da imamo popis najčešće korištenih lozinki na svijetu:

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

Naša će aplikacija provjeriti korisničku lozinku prilikom prijave i neće im dopustiti stvaranje lozinke s ovog popisa.

Ali prije nego što to učinimo, želimo poboljšati ovaj popis. Već imamo kod koji ne dopušta korisniku da se prijavi s lozinkom kraćom od 9 znakova. Tako da ovaj popis možemo smanjiti na samo lozinke koje imaju 9 ili više znakova kako bismo ubrzali provjeru.

Imperativno bismo napisali:

// using the passwords constant from above let longPasswords = []; for (let i = 0; i = 9) { longPasswords.push(password); } } console.log(longPasswords); // logs ["freecodecamp", "mypassword123"];
  1. Izrađujemo prazan popis pod nazivom longPasswords.
  2. Zatim napišemo petlju koja će se pokrenuti onoliko puta koliko ima lozinki na izvornom passwordspopisu.
  3. Tada lozinku dobivamo na indeksu iteracije petlje na kojoj se trenutno nalazimo.
  4. Zatim provjeravamo je li ta lozinka veća ili jednaka 9 znakova.
  5. Ako jest, stavljamo ga na longPasswordspopis.

Jedna od snaga imperativnog programiranja je činjenica o kojoj je lako razmišljati. Poput računala, možemo pratiti korak po korak.

Što je deklarativno programiranje?

Ali postoji još jedan način razmišljanja o kodiranju - kao procesu neprestanog definiranja što su stvari. To se naziva deklarativnim programiranjem.

Imperativno i deklarativno programiranje postižu iste ciljeve. Oni su samo različiti načini razmišljanja o kodu. Oni imaju svoje prednosti i nedostatke, a ima vremena i jedno i drugo koristiti.

Iako je početno jednostavnije razmišljati o imperativnom programiranju, deklarativno programiranje omogućuje nam da napišemo čitljiviji kod koji odražava ono što točno želimo vidjeti. U kombinaciji s dobrim imenima varijabli može biti moćan alat.

Dakle, umjesto davanja računalnih uputa korak po korak, mi izjavljujemo što želimo i dodijeljujemo to rezultatu nekog postupka.

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

Popis longPasswordsje definiran (ili deklariran) kao popis passwordsfiltriranog samo za lozinke veće ili jednake 9 znakova.

Funkcionalne metode programiranja u JavaScript-u omogućuju nam da jasno deklariramo stvari.

  • Ovo je popis lozinki.
  • Ovo je popis samo dugih lozinki. (Nakon trčanja filter.)
  • Ovo je popis lozinki s ID-ovima. (Nakon trčanja map.)
  • Ovo je jedna lozinka. (Nakon trčanja find.)

Jedna od jakih strana deklarativnog programiranja je što nas prisiljava da prvo pitamo što želimo. U imenovanju ovih novih stvari naš kôd postaje izražajan i eksplicitan.

A kad se pojave kolege programeri i pogledaju naš kôd, mogu lakše pronaći greške:

“Ovu varijablu nazivate 'indeks' zbog čega očekujem broj, ali vidim da je to rezultat filterkoji vraća niz. Što je s tim? "

Potičem učenike da što češće pišu deklarativni kôd, neprestano definirajući (i refaktorirajući kako bi redefinirali) što su stvari.

Umjesto da u glavi držite čitav imperativni postupak, u glavi možete držati opipljiviju stvar s jasnom definicijom.

Mike Zetlow vodeći je instruktor u 10x Code Camp-u .