Met behulp van variabelen kunt u waarden opslaan die u in uw programma gebruikt. Voor het declareren van een variabele moet u de instructie var gebruiken met de variabelenaam. In ActionScript 3.0 is het gebruik van de instructie var altijd vereist. Met de volgende regel ActionScript wordt bijvoorbeeld een variabele gedeclareerd met de naam i:
var i;
Als u de instructie var weglaat bij het declareren van een variabele, krijgt u een compilatiefout in de strikte modus en een uitvoeringsfout in de standaardmodus. De volgende coderegel resulteert bijvoorbeeld in een fout als de variabele i niet eerder is gedefinieerd:
i; // error if i was not previously defined
Als u een variabele wilt koppelen aan een gegevenstype, moet u dit doen wanneer u de variabele declareert. U kunt een variabele declareren zonder het type op te geven, maar dit zorgt voor een compilerwaarschuwing in de strikte modus. U geeft het type van een variabele op door achter de variabelenaam een dubbele punt (:) te plaatsen, gevolgd door het type van de variabele. Met de volgende coderegel wordt bijvoorbeeld een variabele i gedeclareerd van het type int:
var i:int;
U kunt een waarde aan een variabele toewijzen met behulp van de toewijzingsoperator (=). Met de volgende coderegel wordt bijvoorbeeld een variabele i gedeclareerd en wordt er de waarde 20 aan toegewezen:
var i:int;
i = 20;
Het kan handig zijn een waarde aan een variabele toe te wijzen wanneer u de variabele declareert, zoals in het volgende voorbeeld:
var i:int = 20;
De techniek om een waarde aan een variabele toe te wijzen wanneer deze wordt gedeclareerd, wordt vaak gebruikt bij het toewijzen van primitieve waarden zoals gehele getallen en tekenreeksen, maar ook bij het maken van een array of instantiëren van een instantie van een klasse. In het volgende voorbeeld wordt een array getoond waarvoor een waarde wordt gedeclareerd en toegewezen in één coderegel.
var numArray:Array = ["zero", "one", "two"];
U kunt een instantie van een klasse maken met de operator new. In het volgende voorbeeld wordt een instantie van een klasse met de naam CustomClass gemaakt en wordt een verwijzing naar de nieuwe instantie van de klasse toegewezen aan de variabele met de naam customItem:
var customItem:CustomClass = new CustomClass();
Als u meerdere variabelen wilt declareren, kunt u ze allemaal in één coderegel declareren met behulp van de kommaoperator (,) als scheidingsteken tussen de variabelen. Met de volgende code worden bijvoorbeeld drie variabelen gedeclareerd in één coderegel:
var a:int, b:int, c:int;
U kunt ook waarden toewijzen aan elk van de variabelen in dezelfde coderegel. Met de volgende code worden bijvoorbeeld drie variabelen gedeclareerd (a, b en c) en wordt aan elke variabele een waarde toegewezen:
var a:int = 10, b:int = 20, c:int = 30;
Hoewel u de kommaoperator kunt gebruiken om declaraties van variabelen te groeperen in één instructie, komt dit de leesbaarheid van de code niet altijd ten goede.
Variabelenbereik
Het bereik van een variabele is het gebied van de code waar toegang tot de variabele mogelijk is door een lexicale verwijzing. Een algemene variabele wordt gedefinieerd in alle gebieden van de code, een lokale variabele wordt gedefinieerd in een deel van de code. In ActionScript 3.0 krijgen variabelen altijd het bereik toegewezen van de functie of klasse waarin ze worden gedeclareerd. Een algemene variabele wordt gedefinieerd buiten een functie- of klassendefinitie. Met de volgende code wordt bijvoorbeeld een algemene variabele strGlobal gemaakt door deze buiten een functie te declareren. Het voorbeeld toont dat een algemene variabele beschikbaar is zowel binnen als buiten de functiedefinitie.
var strGlobal:String = "Global";
function scopeTest()
{
trace(strGlobal); // Global
}
scopeTest();
trace(strGlobal); // Global
U declareert een lokale variabele binnen een functiedefinitie. Het kleinste codegebied waarvoor u een lokale variabele kunt definiëren is een functiedefinitie. Een lokale variabele die binnen een functie wordt gedeclareerd, bestaat alleen in die functie. Wanneer u bijvoorbeeld een variabele declareert met de naam str2 binnen een functie met de naam localScope(), is deze variabele niet beschikbaar buiten de functie.
function localScope()
{
var strLocal:String = "local";
}
localScope();
trace(strLocal); // error because strLocal is not defined globally
Wanneer de variabelenaam die u gebruikt voor de lokale variabele al is gedeclareerd als een algemene variabele, verbergt (of arceert) de lokale definitie de algemene definitie wanneer de lokale variabele in het bereik valt. De algemene variabele blijft bestaan buiten de functie. Met de volgende code wordt bijvoorbeeld een algemene tekenreeksvariabele gemaakt met de naam str1 en wordt vervolgens een lokale variabele met dezelfde naam gemaakt binnen de functie scopeTest(). De instructie trace geeft binnen de functie de lokale waarde van de variabele als uitvoer. Buiten de functie geeft de instructie trace de algemene waarde van de variabele als uitvoer.
var str1:String = "Global";
function scopeTest ()
{
var str1:String = "Local";
trace(str1); // Local
}
scopeTest();
trace(str1); // Global
Variabelen in ActionScript hebben geen bereik op blokniveau, wat in C++ en Java wel het geval is. Een codeblok is een groep instructies tussen een accolade openen ( { ) en een accolade sluiten (}). In sommige programmeertalen, zoals C++ en Java, zijn variabelen die binnen een codeblok worden gedeclareerd, niet beschikbaar buiten dat codeblok. Deze beperking in het bereik wordt bereik op blokniveau genoemd en komt in ActionScript niet voor. Als u een variabele binnen een codeblok declareert, is die variabele niet alleen beschikbaar in dat codeblok maar ook in alle andere delen van de functie waartoe het codeblok behoort. De volgende functie bevat bijvoorbeeld variabelen die worden gedefinieerd in diverse blokbereiken. Alle variabelen zijn beschikbaar in de gehele functie.
function blockTest (testArray:Array)
{
var numElements:int = testArray.length;
if (numElements > 0)
{
var elemStr:String = "Element #";
for (var i:int = 0; i < numElements; i++)
{
var valueStr:String = i + ": " + testArray[i];
trace(elemStr + valueStr);
}
trace(elemStr, valueStr, i); // all still defined
}
trace(elemStr, valueStr, i); // all defined if numElements > 0
}
blockTest(["Earth", "Moon", "Sun"]);
Een interessant gevolg van het ontbreken van bereik op blokniveau is dat u een variabele kunt lezen of ernaar schrijven voordat deze wordt gedeclareerd (mits declaratie plaatsvindt voordat de functie eindigt). Dit komt door een techniek die hoisting wordt genoemd, wat betekent dat de compiler alle declaraties van variabelen naar het hoofdniveau van de functie verplaatst. De volgende code wordt bijvoorbeeld gecompileerd ook al treedt de eerste functie trace() voor de variabele num op voordat de variabele num wordt gedeclareerd:
trace(num); // NaN
var num:Number = 10;
trace(num); // 10
In de compiler vindt echter geen hoisting plaats voor toewijzingsinstructies. Dit verklaart waarom de eerste trace() van num resulteert in NaN (Not a Number), wat de standaardwaarde is voor variabelen van het gegevenstype Number. Dit betekent dat u waarden kunt toewijzen aan variabelen nog voordat deze worden gedeclareerd, zoals in het volgende voorbeeld wordt getoond:
num = 5;
trace(num); // 5
var num:Number = 10;
trace(num); // 10
Standaardwaarden
Een standaardwaarde is de waarde die een variabele bevat voordat u de waarde ervan instelt. U initialiseert een variabele wanneer u voor de eerste keer de waarde ervan instelt. Wanneer u een variabele declareert maar niet de waarde ervan instelt, is de variabele niet-geïnitialiseerd. De waarde van een niet-geïnitialiseerde variabele is afhankelijk van het gegevenstype ervan. In de volgende tabel worden de standaardwaarden van variabelen beschreven, geordend op gegevenstype:
Gegevenstype
|
Standaardwaarde
|
Boolean
|
false
|
int
|
0
|
Number
|
NaN
|
Object
|
null
|
Tekenreeks
|
null
|
uint
|
0
|
Niet gedeclareerd (komt overeen met typeannotatie *)
|
undefined
|
Alle andere klassen, inclusief door de gebruiker gedefinieerde klassen
|
null
|
Voor variabelen van het type Number is de standaardwaarde NaN (Not a Number). Dit is een speciale waarde gedefinieerd door de IEEE-754-standaard die een waarde anders dan een getal vertegenwoordigt.
Als u wel een variabele maar geen gegevenstype declareert, is het gegevenstype * (variabele zonder type) van toepassing. Als u een variabele zonder type ook niet initialiseert met een waarde, is de standaardwaarde undefined.
Voor gegevenstypen anders dan Boolean, Number, int en uint is de standaardwaarde voor een niet-geïnitialiseerde variabele null. Dit geldt voor alle klassen die door ActionScript 3.0 worden gedefinieerd plus de aangepaste klassen die u zelf maakt.
De waarde null is geen geldige waarde voor variabelen van het type Boolean, Number, int of uint. Wanneer u probeert de waarde null toe te wijzen aan een van deze variabelen, wordt de waarde omgezet in de standaardwaarde voor dat gegevenstype. U kunt de waarde null toewijzen aan variabelen van het type Object. Wanneer u probeert de waarde undefined toe te wijzen aan een variabele van het type Object, wordt de waarde omgezet in null.
Voor variabelen van het type Number bestaat een speciale functie op hoofdniveau met de naam isNaN() die de Booleaanse waarde true retourneert als de variabele geen getal is en false als dat wel het geval is.