Het eerste slagveld
“Een
functie object is als een kanon bij een zwaardgevecht.”
- Sam Rain
- 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*/
}
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;
}
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.”*/
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;
}
{
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