zondag 29 juli 2012

JavaScript voor mensen, hobbits en elven - Deel 18: Vechten met variabelen


Het eerste slagveld

“Zien; het meest veelzijdige vaardigheid van bewust zijn.”
                                                                                    - Sam Rain
Tijd voor een paar lesjes met het Elvenzwaard van Aragon – de variabelen. De ijverige elf zal inmiddels het één en ander doorhebben, maar voor de hobbits die voor het eerst buiten de Shire treden is het onderwerp vast nog redelijk abstract. Variabelen zijn referenties naar plaatsjes in het geheugen – en geheugen is heel belangrijk voor snelle elvenmagie.
De tovenaarsfilosofie dat meer geheugengebruik de boel langzamer maakt, is voor de hand liggend. Tovenaars die draken moeten verslaan hebben het liefst korte spreuken, dan dat ze een heel spreukenboek moeten voorlezen. Iedere keer dat er een variabele wordt ‘gebruikt’ neemt dat al tijd in beslag en ‘nieuwe’ variabelen nemen geheugen in beslag.
Er zijn twee soorten opslaggegevens voor JavaScript: een referentie en een daadwerkelijk stuk geheugen. Om met variabelen te kunnen rekenen is JavaScript een brave Kobold – nummers, booleans en datum primitieven ‘schrijft’ JavaScript over; alsof het een kopie betreft. Tovenaars noemen dit letterlijk overnemen ‘copy by value’. Arrays, Strings en Functies worden door JavaScript aangestipt met een voetnoot, die verwijst naar een ander hoofdstuk. Tovenaars, zoals altijd, hebben ook hier een term voor, namelijk ‘copy by reference’.
Hoe vaker een toverspreuk een letterlijke kopie maakt, hoe meer geheugen er wordt gebruikt. Nu doet JavaScript het meeste ‘werk’ zelf, maar ijverige elven zullen toch wat bewuster moeten zijn. Neem de volgende functie eens als voorbeeld:
function optellen (a,b,c,d,e,f,g,h,i)
{ var oplossing = a+b+c+d+e+f+g+h+i;
a -
return oplossing;
}
Als alle variabelen nummers zouden zijn, worden er een hoop variabelen gemaakt. Praktischer is het om een lijst te maken en deze door te geven:
var nummers AtotI = new Array (1,5,3,12,5,30,7,77,4); /*een genummerde lijst*/
function optellen(lijst) { var som;
for (var i=o; i <l ijst.length; i++) /*’i’ is onze ‘tellende’ variabele*/
{ som + = lijst[i]; /*de + = operator telt de waarde rechts op bij de waarde die al aanwezig is in de linker */
}
return som;
}
var totaal = optellen (nummers AtotI);
Hoewel deze functie meteen overweldigend is, werkt deze efficiënter dankzij referenties. Als we 10000 woorden willen optellen, zou de functie beschrijving een leven in beslag nemen met het 1e voorbeeld al – laat staan het aantal variabelen die per optelsom aangemaakt zouden moeten worden.
JavaScript doet het moeilijke en zware werk voor alle wezens van Midden-Aarde; wanneer een variabele zijn levensduur heeft ‘opgebruikt’, dan worden deze verwijderd. Om dit te kunnen doen, hoeft de ijverige elf alleen maar goed gebruik te maken van het ‘zicht’ – door de Tovenaars en Orcs de ‘scope’ genoemd. Alle variabelen tussen de accolades en haakjes ‘leven’ tot het laatste haakje. Daarnaast kunnen variabelen tussen de accolades niet naar variabelen kijken in andere accolades. Kijk eens naar de volgende toverspreuk:
var meesterRing = “Sauron”; /*deze variabele is een ‘global’, dat wil zeggen dat deze ‘leeft’ tot het eind van de toverspreuk.*/
function draagRing(ring)
{ /*de ‘ring’ variabele is binnen deze accolades te gebruiken omdat deze een ‘parameter’ is van de functie*/
if (ring==”Sauron”) /*met de == operator kun je variabelen vergelijken*/
{
var gewonnen = true; /*de variabele ‘gewonnen’ is aangemaakt, meer leeft niet verder dan deze accolades!*/
}
meesterRing=”Frodo”;
/*hoewel meesterRing binnen deze accolades staat, wordt deze toch in het hele script aangepast, omdat deze al bestond vóór de andere accolades*/
}
var eigenaar = draagRing (meesterRing);
/*eigenaar is “Frodo”*/

Meer lezen over Programmeren? Klik hier voor de inhoudsopgave van alle artikelen!

©SamRain
JavaScript - 18

Geen opmerkingen:

Een reactie posten