dinsdag 7 augustus 2012

JavaScript voor mensen, hobbits en elven - Deel 22: Lussen met objecten


De strijd bij Rohan

“Herhalen, herhalen en nog eens herhalen!”
                                                                        - 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;
}
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;
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*/
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!

©SamRain
JavaScript - 22

Geen opmerkingen:

Een reactie posten