Werken met vlaggen in JavaScript
Nu leren we hoe we met vlaggen werken.
Een vlag is een speciale variabele die
slechts twee waarden kan aannemen: true
en false. Met vlaggen kunnen
taken worden opgelost die de afwezigheid van iets controleren:
je kunt bijvoorbeeld controleren of er in een array
geen element met een bepaalde waarde zit. Laten we
beginnen.
Laten we het volgende probleem oplossen: gegeven een array
met nummers, controleer of er een
element in zit met de waarde 3 of niet. Als
die er is - geef dan '+++' uit, als die er niet is -
geef dan '---' uit.
Laten we eerst proberen '+++' uit te voeren.
Hiervoor doorlopen we alle elementen van onze array
en vragen met een if - is het huidige
element gelijk aan de waarde 3. Als het gelijk is - voeren we
'+++' uit:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Maar onze oplossing is niet erg goed: want als
er in de array niet één waarde 3 is,
maar meerdere, dan wordt '+++' meerdere
keren uitgevoerd. Laten we onze array aanpassen (we maken
twee elementen met de waarde 3) en daarvan overtuigen:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // wordt meerdere keren uitgevoerd
}
}
Laten we het probleem oplossen: we beëindigen de lus met
break, als het element al is gevonden:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // beëindig de lus
}
}
Laten we nu proberen te regelen dat,
als er helemaal geen elementen in de array zijn met de waarde
3, er '---' wordt uitgevoerd. Een wijdverbreid
misverstand is om else toe te voegen aan
onze if - in dat geval wordt '---'
uitgevoerd voor alle elementen die geen
3 zijn:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // wordt uitgevoerd bij element 3
} else {
console.log('---'); // wordt uitgevoerd bij elementen 1, 2, 4, 5
}
}
Kortom, het idee om else toe te voegen - is een slecht
idee, het werkt niet. Voor het oplossen van dit soort
taken (dergelijke taken komen vrij
vaak voor) gebruikt men zogenaamde vlaggen.
Zoals hierboven al vermeld, is een vlag een
variabele die twee waarden kan aannemen:
true of false.
Laten we een variabele flag maken
met de volgende betekenis: als deze gelijk is aan true,
dan zit er een element 3 in de array, en als
false, dan is er geen such element.
Zet de variabele flag aanvankelijk
op de waarde false - dat wil zeggen, we nemen aan
dat het element 3 niet in de array zit:
let arr = [1, 2, 3, 4, 5];
let flag = false; // we nemen aan dat element 3 niet in de array zit
Vervolgens starten we een lus met een if, zoals we dat eerder
deden. Als de lus ontdekt dat er een element 3 in de array
zit - dan zetten we de variabele flag
op de waarde true en verlaten we de lus
met break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // we nemen aan dat element 3 niet in de array zit
for (let elem of arr) {
if (elem == 3) {
flag = true; // element is er - herdefinieer de variabele flag
break; // verlaat de lus
}
}
Het antwoord op de vraag, of er 3 in de array zit
of niet, kunnen we alleen na de lus geven.
En dat antwoord hebben we al: na de lus
kon de variabele flag false blijven
of kon zijn waarde veranderen naar true,
als de lus 3 in de array heeft ontdekt:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// hier is de variabele flag gelijk aan true of false
Nu kunnen we na de lus een if doen, die
naar de variabele flag kijkt en
'+++' of '---' op het scherm toont:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
if (flag === true) {
console.log('+++');
} else {
console.log('---');
}
Gegeven een array:
let arr = ['a', 'b', 'c', 'd', 'e'];
Controleer of er een element
'c' in deze array zit.
Als die er is - toon dan '+++',
en als die er niet is - toon dan '---'.
Schrijf code die controleert of een nummer een priemgetal is of niet. Een priemgetal is alleen deelbaar door één en door zichzelf, en is niet deelbaar door andere nummers.