maandag 30 juli 2012

JavaScript voor mensen, hobbits en elven - Deel 19: Functies als wapens


Het eerste slagveld

“Een functie object is als een kanon bij een zwaardgevecht.”
                                                                                                - Sam Rain
Functies zijn óók objecten; samen met de datastructuren zorgen zij voor nodige elvenmagie. Het gebruiken van functies hangt samen met de kennis die je er van hebt; hobbits zullen meer gecharmeerd zijn van de functies die werken als ‘klasse methoden’, terwijl elvenkrijgers en mensenridders graag Orcs onderwerpen met de kracht die Javascript functies hebben als object. Voor alle wezens, onervaren of geduchte krijgers, begint het altijd bij de basis – wat zijn functies als object?
Er zijn twee soorten functies in JavaScript: de standaard functie en de ‘anonieme’ functie (door tovenaars vaak ‘anonymous’ genoemd). Anonieme functies zijn als de standaard functies zonder, zoals de naam al zegt, een naam. Het nut van anonieme functies zit in twee factoren verborgen, namelijk daadkracht en simpliciteit.
Standaard functie                                    Anonieme functie
function zwaardslag(schade)                  var zwaardslag = new Function (“schade”,
{ schade + = 10; /*de += telt de            “return(schade+10)”);
waarde rechts op bij de linker*/
}
Zowel beide functies werken door een getal (de kracht van een zwaardslag) mee te geven zoals je zou verwachten: zwaardslag (10) levert 20 op als resultaat. Een anonieme functie is qua geheugenefficiëntie veel ‘slimmer’; het functie object ‘leeft’ net zo lang als de variabele deze nodig heeft om een waarde aangewezen te krijgen. Daarnaast kun je met anonieme functies binnen een functie een oneindige soep van complexiteit breien, zonder deze te ‘verlaten’. Voor hobbits kunnen anonieme functies intimiderend zijn, maar wees niet gevreesd – ze zijn simpeler dan acrobatische elven je willen doen geloven! Een functie, anoniem of niet, bestaat altijd uit twee delen: de argumenten en het blok elvenmagie.
Functies, net als andere objecten, hebben allemaal eigenschappen die ze ‘erven’ van hun klasse (Function). Eén bijzondere is ‘arguments’ – een array die alle parameters opvangt. Iedere functie heeft een array ‘arguments’, die op zijn beurt weer alle eigenschappen geërfd heeft van de lijst klasse (Array) – en dus de lengte eigenschap (length).
function aanvallen() {{ var aanval=”aanval op”; var i;
 if (aanvallen.arguments.length <1) /*een vergelijking om te bepalen of er argumenten zijn meegegeveb*/
 {
 aanval = “niemand om aan te vallen.”;
 }
 else
 {
 for (i=0; i<aanvallen.arguments.length; i++) /*zoals elke genummerde lijst, een for-lus gebruiken*/
 {
 aanval += aanvallen.arguments[i]+”,”;
 }
 aanval += “.”;
 }
 return aanval;
}
Wanneer we de bovenstaande toverspreuk uitvoeren met elvenmagie:
var uitslag = aanvallen(“Orc”, “Trol”, “Olifant”); /*uitslag heeft nu de waarde “aanval op Orc, Trol, Olifant.”*/
uitslag = aanvallen(); /*uitslag is nu “niemand om aan te vallen.”*/
Hoewel het nu praktisch aanvoelt voor elven om de ‘arguments array’ te gebruiken, blijft het handiger om parameters tóch te definiëren; wanneer we een functie op zo’n wijze opbouwen, werken deze als referenties, zonder de nummer-volgorde van de ‘arguments array’ te kennen:
function aanvallen(wezen, schade)
{
var aanval = “aanval op” + wezen + “met” + schade + “krachtpunten!”;
return aanval;
}
Functie objecten hebben veel eigenschappen, maar zelfs Tovenaars en Orcs zullen er mee eens zijn dat deze beschreven werking de eerste stap is naar overwinning op het slagveld van Midden-Aarde!

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

©SamRain
JavaScript - 19

Geen opmerkingen:

Een reactie posten