Imperativ vs Deklarativ programmering - forskellen forklaret på almindeligt engelsk

Som kodningsinstruktør er det min pligt at sende programmører ud i verden og tænke på nye måder. Et stort skift i tænkning opstår, når vi skifter fra bydende til deklarativ programmering.

Når mine studerende har lært grundlæggende JavaScript, går vi over funktionel programmering og de array-metoder, der bruges i en deklarativ kodningstil. Det er her deres hjerner begynder at poppe og sizle og smelte som skumfiduser over en ild.

Hvad er vigtig programmering?

Som nybegynder har du sandsynligvis for det meste kodet i en bydende stil: du giver computeren et sæt instruktioner til at følge, og computeren gør, hvad du vil, i en let at følge sekvens.

Forestil dig, at vi har en liste over verdens mest almindeligt anvendte adgangskoder:

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

Vores app vil kontrollere brugerens adgangskode ved tilmelding og ikke tillade dem at oprette en adgangskode, der er fra denne liste.

Men inden vi gør det, vil vi forfine denne liste. Vi har allerede kode, der ikke tillader brugeren at tilmelde sig en adgangskode på mindre end 9 tegn. Så vi kan reducere denne liste til kun adgangskoder på 9 tegn eller mere for at fremskynde vores kontrol.

Imperativt ville vi skrive:

// using the passwords constant from above let longPasswords = []; for (let i = 0; i = 9) { longPasswords.push(password); } } console.log(longPasswords); // logs ["freecodecamp", "mypassword123"];
  1. Vi opretter en tom liste kaldet longPasswords.
  2. Derefter skriver vi en løkke, der kører så mange gange, som der er adgangskoder i den oprindelige passwordsliste.
  3. Derefter får vi adgangskoden til indekset for den loop-iteration, vi for tiden er på.
  4. Derefter kontrollerer vi, om adgangskoden er større end eller lig med 9 tegn.
  5. Hvis det er tilfældet, sætter vi det på longPasswordslisten.

En af de afgørende programmerings styrker er, at det er let at begrundes. Som en computer kan vi følge trin for trin.

Hvad er deklarativ programmering?

Men der er en anden måde at tænke på kodning på - som en proces til konstant at definere, hvad ting er. Dette kaldes deklarativ programmering.

Imperativ og deklarativ programmering opnår de samme mål. De er bare forskellige måder at tænke på kode på. De har deres fordele og ulemper, og der er tidspunkter at bruge begge dele.

Selvom det er nemmere at begynde med vigtig programmering for begyndere, giver deklarativ programmering os mulighed for at skrive mere læsbar kode, der afspejler, hvad vi lige vil se. Kombineret med gode variabelnavne kan det være et kraftfuldt værktøj.

Så i stedet for at give computeren trin for trin instruktioner, erklærer vi, hvad det er, vi ønsker, og vi tildeler dette til resultatet af en eller anden proces.

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

Listen over longPasswordser defineret (eller erklæret) som listen over passwordsfiltreret til kun adgangskoder, der er større end eller lig med 9 tegn.

De funktionelle programmeringsmetoder i JavaScript giver os mulighed for rent at erklære ting.

  • Dette er en liste over adgangskoder.
  • Dette er en liste over kun lange adgangskoder. (Efter løb filter.)
  • Dette er en liste over adgangskoder med id'er. (Efter løb map.)
  • Dette er en enkelt adgangskode. (Efter løb find.)

En af deklarative programmerings styrker er, at det tvinger os til at spørge, hvad vi først vil have. Det er i navngivningen af ​​disse nye ting, at vores kode bliver udtryksfuld og eksplicit.

Og når vores medudviklere kommer sammen og ser på vores kode, kan de lettere finde fejl:

”Du kalder denne variabel 'indeks', som får mig til at forvente et tal, men jeg ser, at det er resultatet, filtersom returnerer en matrix. Hvad sker der med det? ”

Jeg opfordrer eleverne til at skrive erklærende kode så ofte som muligt og konstant definere (og refactoring for at omdefinere), hvad ting er.

I stedet for at holde en hel bydende proces i dit hoved, kan du holde en mere håndgribelig ting i dit hoved med en klar definition.

Mike Zetlow er hovedinstruktør på 10x Code Camp .