Les 4: Loops
Home โ€บJavaScript-track โ€บLes 4

๐Ÿ”„ Loops

โฑ Geschatte leestijd: 20 minuten ยท 7 stappen

Stel je voor dat je 100 getallen wilt loggen โ€” zou je dan 100 keer console.log() schrijven? Met loops hoef je dat niet. Een loop herhaalt een stuk code zolang een bepaalde conditie geldt. Dit is een van de krachtigste tools in programmeren.

1 De for-loop

Drie onderdelen

Een for-loop bestaat uit drie delen tussen haakjes, gescheiden door puntkomma's: initialisatie (begin), conditie (doorgaan zolang), en stap (aanpassing na elke iteratie).

for-loop anatomie
//       initialisatie  conditie   stap
for (let i = 0;       i < 5;     i++) {
  console.log(i); // 0, 1, 2, 3, 4
}

// Aftellen
for (let i = 5; i >= 1; i--) {
  console.log(i); // 5, 4, 3, 2, 1
}

// Stap van 2
for (let i = 0; i <= 10; i += 2) {
  console.log(i); // 0, 2, 4, 6, 8, 10
}

De drie delen uitgelegd:

let i = 0Initialisatie: maak telvariabele i aan met beginwaarde 0
i < 5Conditie: ga door zolang i kleiner is dan 5
i++Stap: verhoog i met 1 na elke iteratie (i++ is hetzelfde als i = i + 1)

2 De while-loop

Wanneer gebruik je while?

Een while-loop gebruik je als je van tevoren niet weet hoe vaak de lus moet draaien. De lus gaat door zolang de conditie true is. Vergeet niet de variabele aan te passen โ€” anders krijg je een oneindige lus!

while-loop
let geld = 100;

while (geld > 0) {
  console.log(`Nog โ‚ฌ${geld} over.`);
  geld -= 30; // verlaag met 30 na elke stap
}
console.log("Op!");
// โ†’ "Nog โ‚ฌ100 over."
// โ†’ "Nog โ‚ฌ70 over."
// โ†’ "Nog โ‚ฌ40 over."
// โ†’ "Nog โ‚ฌ10 over."
// โ†’ "Op!"

โš ๏ธ Oneindige lus! Als de conditie nooit false wordt, blijft de lus voor altijd draaien en bevriest de browser. Zorg altijd dat de conditie uiteindelijk false wordt.

3 break en continue

Fijnmazige controle over de lus

break stopt de lus direct en gaat verder na de lus. continue slaat de rest van de huidige iteratie over en springt naar de volgende.

break โ€” stop de lus
for (let i = 1; i <= 10; i++) {
  if (i === 5) break; // stop bij 5
  console.log(i);
}
// โ†’ 1, 2, 3, 4
continue โ€” sla over
for (let i = 1; i <= 6; i++) {
  if (i % 2 === 0) continue; // sla even over
  console.log(i);
}
// โ†’ 1, 3, 5

๐Ÿ’ก Ezelsbruggetje: break = "breek de lus af". continue = "ga door naar de volgende iteratie".

4 De for...of-loop

Itereren over arrays

De for...of-loop is speciaal ontworpen voor het doorlopen van arrays (lijsten). Je hoeft geen teller bij te houden โ€” je krijgt direct elk element. Arrays leer je uitgebreid in les 6; hier zie je alvast een voorproefje.

for...of met een array
const vakken = ["HTML", "CSS", "JavaScript", "PHP"];

// for...of: eenvoudig en leesbaar
for (const vak of vakken) {
  console.log(`Ik studeer: ${vak}`);
}
// โ†’ "Ik studeer: HTML"
// โ†’ "Ik studeer: CSS"
// โ†’ "Ik studeer: JavaScript"
// โ†’ "Ik studeer: PHP"

// Vergelijk met klassieke for-loop (meer code, minder leesbaar):
for (let i = 0; i < vakken.length; i++) {
  console.log(vakken[i]);
}

โœ“ Vuistregel: Als je over een array itereert, gebruik dan for...of. Als je de index nodig hebt of een specifiek aantal stappen telt, gebruik dan een gewone for-loop.

5 Oefening 1: Maaltafel van 7

Opdracht:

Gebruik een for-loop om de maaltafel van 7 te loggen: 7, 14, 21, 28 ... tot en met 70 (7 ร— 10).

โœ“ Een for-loop aanwezig

โœ“ Vermenigvuldiging met 7 (* 7) gebruikt

editor
Console output

6 Oefening 2: Kleinste gemene veelvoud

Opdracht:

Gebruik een while-loop om het eerste getal groter dan 1 te vinden dat deelbaar is door zowel 6 als 7. Log dat getal. (Het antwoord is 42.)

โœ“ Een while-loop aanwezig

โœ“ Modulo-operator % gebruikt

โœ“ Het getal 42 wordt gelogd

editor
Console output

7 Eindopdracht: Getallen met break en continue

Opdracht:

Gebruik een for-loop voor de getallen 1 tot en met 20, maar:

โœ“ Sla veelvouden van 4 over met continue (4, 8, 12, 16, 20 worden niet gelogd)

โœ“ Stop de lus zodra je het getal 17 bereikt met break (17 wordt ook niet gelogd)

โœ“ Gebruik een for-loop, break รฉn continue

editor
Console output
๐Ÿ“„ Volledig voorbeeld: loops.js
// โ”€โ”€ for-loop โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
for (let i = 1; i <= 5; i++) {
  console.log(i); // 1 2 3 4 5
}

// โ”€โ”€ while-loop โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
let n = 10;
while (n > 0) {
  console.log(n);
  n -= 3;
}

// โ”€โ”€ break en continue โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
for (let i = 1; i <= 10; i++) {
  if (i % 2 === 0) continue; // sla even getallen over
  if (i === 9)     break;    // stop bij 9
  console.log(i);            // 1 3 5 7
}

// โ”€โ”€ for...of โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
const talen = ["HTML", "CSS", "JavaScript"];
for (const taal of talen) {
  console.log(`Ik ken ${taal}`);
}

// โ”€โ”€ Maaltafel van 7 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
for (let i = 1; i <= 10; i++) {
  console.log(`7 ร— ${i} = ${7 * i}`);
}

// โ”€โ”€ Kleinste gemene veelvoud van 6 en 7 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
let getal = 2;
while (!(getal % 6 === 0 && getal % 7 === 0)) {
  getal++;
}
console.log(`KGV van 6 en 7: ${getal}`); // 42