De strijd bij Rohan
“Herhalen, herhalen en
nog eens herhalen!”
- Sam Rain
- Sam Rain
Als een vechter voor Midden-Aarde gaat het leven soms niet
over elvenrozen. Objecten zijn leuke ideeën, maar doen uit zichzelf erg weinig.
De lussen-magie van JavaScript biedt de mogelijkheid om eens wat echte strijd
te leveren; dit keer gaan we eens te zwaard met de krachtige ‘while’-lus.
De ‘while’-lus is een zeer simpele lus met een portaal naar
het echte toverwerk. Deze lus werkt met een variabele (of expressie) die een
Booleanse (waar of onwaar) waarde heeft als resultaat – zolang deze ‘true’ is,
wordt de elvenmagie tussen de accolades herhaald. In deze simpele aanpak zit
meteen het gevaar; wie onvoorzichtig te werk gaat, blijft oneindig de magie
herhalen, wat soms ernstige gevolgen kan hebben. Wees niet al te bevreesd, want
zelden zal Midden-Aarde er écht onder lijden – echter blijft het een zonde van
de tijd om een foutje in deze lus te maken.
Laten we eerst een object tot leven toveren, zodat we de
‘while’ lus eens kunnen demonstreren:
function Toren(){
this.verdedigingspunten=1000;
this.staande=true;
}
this.verdedigingspunten=1000;
this.staande=true;
}
Het object Toren is supersimpel; we geven het twee initiële
waarden – een numerieke waarde in de vorm van ‘verdedigingspunten’ en de waarde
die we gaan gebruiken om onze ‘while’ lus tot halt te roepen in de variabele
‘staande’. Stel dat we de ‘while’ lus ontwerpen als een katapult, die bij
iedere lus een projectiel afvuurt op een toren, waarna de verdedigingspunten
afnemen. Wanneer de verdedigingspunten op zijn, dan moeten we zorgen dat de
variabele ‘staande’ onwaar wordt – wie vuurt er immers op een verslagen toren?
Als extraatje gebruiken we een logboek variabele, zodat Bilbo deze informatie
in zijn boek kan gebruiken of de ijverige elf zichzelf een schouderklopje kan
geven door deze weer te geven op het scherm. Met de eerdere magie van het
torenobject, kunnen we met de volgende toverspreuk aan de slag:
var logboek = “”; /*een lege tekenreeks, die beschikbaar is
voor de while-lus en daarbuiten*/
var helmsdeep= new Toren(); /*helmsdeep is nu een zelfstandige kopie van het Toren-object*/
var projectiel =100;
var helmsdeep= new Toren(); /*helmsdeep is nu een zelfstandige kopie van het Toren-object*/
var projectiel =100;
while (helmsdeep.staande) /*helmsdeep ‘erft’ alle
eigenschappen van Toren*/
{ /*zolang staande ‘waar’ is, wordt de volgende magie steeds opnieuw uitgevoerd*/
helmsdeep.verdedigingspunten - = projectiel; /*de -= operator trekt de waarde rechts af van links en slaat daarin meteen de uitkomst op: x-=y is als x=x-y*/
if (helmsdeep.verdedigingspunten<1) /*hier bepalen we of de toren ‘verslagen’ is*/
{ /*zo ja, dan voeren we de ‘if’ uit*/
helmsdeep.staande=false;
logboek+= “helmsdeep is verslagen!”;
}
} /*JavaScript ‘springt’ nu naar boven, en begint weer bij de while*/
{ /*zolang staande ‘waar’ is, wordt de volgende magie steeds opnieuw uitgevoerd*/
helmsdeep.verdedigingspunten - = projectiel; /*de -= operator trekt de waarde rechts af van links en slaat daarin meteen de uitkomst op: x-=y is als x=x-y*/
if (helmsdeep.verdedigingspunten<1) /*hier bepalen we of de toren ‘verslagen’ is*/
{ /*zo ja, dan voeren we de ‘if’ uit*/
helmsdeep.staande=false;
logboek+= “helmsdeep is verslagen!”;
}
} /*JavaScript ‘springt’ nu naar boven, en begint weer bij de while*/
Na tien maal herhaald te zijn, eindigt de magie omdat de
toren van helmsdeep geen verdedigingspunten meer over heeft. Met een beetje
creativiteit, kennis van lijstjes (arrays) en het doorlopen ervan met een
andere lus (for) zou je met deze katapult een hoop torens ten val kunnen
brengen! Maar laten we dat maar voor de Orcs goed geheim houden! Wat dacht je
anders over het schieten van pijlen naar Orcs en Trollen? Dezelfde techniek,
andere toepassing!
Meer lezen over Programmeren? Klik hier voor de inhoudsopgave van alle
artikelen!
Geen opmerkingen:
Een reactie posten