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.