Variablen

Mit Variablen können Sie Werte speichern, die Sie in Ihrem Programm verwenden. Zum Deklarieren einer Variablen verwenden Sie die var-Anweisung mit dem Variablennamen. In ActionScript 3.0 ist die var-Anweisung immer erforderlich. Beispielsweise wird mit der folgenden Zeile eine Variable namens i deklariert:

var i;

Wenn Sie beim Deklarieren einer Variablen die var-Anweisung weglassen, tritt im strikten Modus ein Compiler-Fehler und im Standardmodus ein Laufzeitfehler auf. So führt beispielsweise die folgende Codezeile zu einem Fehler, wenn die i-Variable nicht zuvor definiert wurde:

i; // error if i was not previously defined

Das Zuweisen einer Variablen zu einem Datentyp muss bereits beim Deklarieren der Variablen geschehen. Das Deklarieren einer Variablen, ohne ihr einen Variablentyp zuzuweisen, ist zwar zulässig, erzeugt im strikten Modus jedoch eine Compiler-Warnung. Sie weisen einen Variablentyp zu, indem Sie dem Variablennamen einen Doppelpunkt (:) gefolgt vom Variablentyp anhängen. Im folgenden Code wird beispielsweise eine Variable i des Typs „int“ deklariert:

var i:int;

Mit dem Zuweisungsoperator (=) können Sie einer Variablen einen Wert zuweisen. Im folgenden Code wird beispielsweise eine Variable i deklariert und der Wert 20 zugewiesen:

var i:int; 
i = 20;

Vielleicht ist es für Sie einfacher, der Variablen den Wert schon beim Deklarieren zuzuweisen. Dies wird im folgenden Beispiel gezeigt:

var i:int = 20;

Das Verfahren, einen Wert schon beim Deklarieren der Variablen zuzuweisen, wird allgemein nicht nur beim Zuweisen von Grundwerten wie Ganzzahlen und Strings, sondern auch beim Erstellen von Arrays oder Instanziieren von Klasseninstanzen eingesetzt. Im folgenden Beispiel wird mit nur einer Codezeile ein Array deklariert und ein Wert zugewiesen.

var numArray:Array = ["zero", "one", "two"];

Mit dem Operator new können Sie eine Instanz einer Klasse erstellen. Im folgenden Beispiel wird eine Instanz namens CustomClass erstellt und einer Variablen namens customItem ein Verweis auf die neu erstellte Klasseninstanz zugewiesen:

var customItem:CustomClass = new CustomClass();

Auch wenn Sie mehrere Variable deklarieren müssen, können Sie mit einer Codezeile arbeiten. In diesem Fall verwenden Sie den Komma-Operator (,), um die Variablen voneinander zu trennen. Im folgenden Code werden beispielsweise drei Variable auf einer Codezeile deklariert:

var a:int, b:int, c:int;

Auf der gleichen Codezeile können Sie jeder Variablen auch einen Wert zuweisen. Im folgenden Code werden beispielsweise drei Variable (a, b und c) deklariert, und jeder Variablen wird ein Wert zugewiesen:

var a:int = 10, b:int = 20, c:int = 30;

Der Nachteil beim Verwenden des Komma-Operators zum Gruppieren von Variablendeklarationen in nur einer Anweisung ist jedoch, dass die Lesbarkeit Ihres Codes beeinträchtigt wird.

Gültigkeitsbereich

Der Gültigkeitsbereich einer Variablen ist der Bereich Ihres Codes, in dem durch einen lexikalischen Verweis auf die Variable zugegriffen werden kann. Eine globale Variable ist in allen Bereichen Ihres Codes definiert, während eine lokale Variable nur in einem bestimmten Teil Ihres Codes definiert ist. In ActionScript 3.0 sind Variablen immer dem Gültigkeitsbereich der Funktion oder Klasse zugeordnet, in der sie deklariert wurden. Eine globale Variable ist eine Variable, die außerhalb einer Funktions- oder Klassendefinition definiert ist. Im folgenden Code wird beispielsweise eine globale Variable strGlobal erstellt, indem sie außerhalb einer Funktion deklariert wird. Das Beispiel zeigt, dass eine globale Variable sowohl innerhalb als auch außerhalb der Funktionsdefinition verfügbar ist.

var strGlobal:String = "Global"; 
function scopeTest() 
{ 
    trace(strGlobal); // Global 
} 
scopeTest(); 
trace(strGlobal); // Global

Sie deklarieren eine lokale Variable, indem Sie die Variable innerhalb einer Funktionsdefinition deklarieren. Der kleinste Codebereich, für den Sie eine lokale Variable definieren können, ist eine Funktionsdefinition. Eine lokale Variable, die in einer Funktion deklariert wurde, existiert nur in dieser Funktion. Wenn Sie beispielsweise eine Variable namens str2 in einer Funktion namens localScope() deklarieren, steht diese Variable außerhalb der Funktion nicht zur Verfügung.

function localScope() 
{ 
    var strLocal:String = "local"; 
} 
localScope(); 
trace(strLocal); // error because strLocal is not defined globally

Wenn der Name, den Sie für Ihre lokale Variable verwenden, bereits als globale Variable deklariert ist, hat die lokale Definition Vorrang vor der globalen Definition, solange sich die lokale Variable im Gültigkeitsbereich befindet. Die globale Variable existiert weiterhin außerhalb der Funktion. Im folgenden Code wird beispielsweise eine globale Stringvariable namens str1 und dann eine lokale Variable mit demselben Namen in der Funktion scopeTest() erstellt. Die Anweisung trace in der Funktion gibt den lokalen Wert der Variablen zurück, und die Anweisung trace außerhalb der Funktion gibt den globalen Wert der Variablen zurück.

var str1:String = "Global"; 
function scopeTest () 
{ 
    var str1:String = "Local"; 
    trace(str1); // Local 
} 
scopeTest(); 
trace(str1); // Global

ActionScript-Variablen haben im Gegensatz zu Variablen in C++ und Java keinen Gültigkeitsbereich auf Blockebene. Ein Codeblock ist eine Gruppe von Anweisungen zwischen einer öffnenden geschweiften Klammer ({) und einer schließenden geschweiften Klammer (}). In einigen Programmiersprachen, wie beispielsweise C++ und Java, stehen Variablen die in einem Codeblock deklariert wurden, außerhalb dieses Codeblocks nicht zur Verfügung. Diese Einschränkung des Gültigkeitsbereichs wird als Gültigkeitsbereich auf Blockebene bezeichnet. Eine solche Einschränkung gibt es in ActionScript nicht. Wenn Sie also eine Variable innerhalb eines Codeblocks deklarieren, steht die Variable nicht nur in diesem Codeblock, sondern auch in anderen Teilen der Funktion zur Verfügung, zu welcher der Codeblock gehört. Beispielsweise enthält die folgende Funktion Variablen die in verschiedenen Block-Gültigkeitsbereichen definiert sind. Alle Variablen stehen in der gesamten Funktion zur Verfügung.

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"]);

Eine interessante Auswirkung des Fehlens eines Gültigkeitsbereichs auf Blockebene ist, dass Sie eine Variable schon vor dem Deklarieren für Lese- und Schreibvorgänge verwenden können, solange sie vor dem Ende der Funktion deklariert wird. Dies beruht auf der so genannten Hoisting-Technik (etwa: Hochziehen), die dafür sorgt, dass der Compiler alle Variablendeklarationen an den Anfang der Funktion verschiebt. Beispielsweise kann der folgende Code kompiliert werden, obwohl die erste trace()-Funktion für die Variable num schon vor der Deklaration der num-Variable ausgeführt wird.

trace(num); // NaN 
var num:Number = 10; 
trace(num); // 10

Der Compiler verschiebt jedoch keine Zuweisungsanweisungen an den Anfang einer Funktion. Dies erklärt, warum die erste trace()-Funktion für num zum Ergebnis NaN (not a number) führt, dem Standardwert für Variablen des Datentyps „Number“. Aus diesem Grund können Sie Variablen schon vor ihrer Deklaration Werte zuweisen. Dies wird im folgenden Beispiel gezeigt:

num = 5; 
trace(num); // 5 
var num:Number = 10; 
trace(num); // 10

Standardwerte

Ein Standardwert ist der Wert, den eine Variable enthält, bevor Sie ihren Wert einstellen. Sie initialisieren eine Variable, wenn Sie ihren Wert das erste Mal einstellen. Wenn Sie eine Variable deklarieren, ohne ihren Wert einzustellen, ist diese Variable nicht initialisiert. Der Wert einer nicht initialisierten Variablen hängt von ihrem Datentyp ab. In der folgenden Tabelle sind die Standardwerte der Variablen nach Datentyp aufgeführt:

Datentyp

Standardwert

Boolesch

false

int

0

Number

NaN

Objekt

null

String

null

uint

0

Nicht deklariert (entspricht der Typanmerkung *)

undefined

Alle weiteren Klassen, einschließlich benutzerdefinierter Klassen.

null

Bei Variablen des Typs „Number“ lautet der Standardwert NaN (not a number). Dies ist ein Sonderwert, der vom IEEE-754-Standard definiert wurde, um einen Wert auszudrücken, der keine Zahl darstellt.

Wenn Sie beim Deklarieren einer Variablen keinen Datentyp angeben, gilt der Standarddatentyp *. Dies bedeutet, dass die Variable nicht typisiert ist. Wenn Sie darüber hinaus eine nicht typisierte Variable nicht mit einem Wert initialisieren, lautet der Standardwert undefined.

Bei anderen Datentypen als „Boolean“, „Number“, „int“ und „uint“ lautet der Standardwert einer nicht initialisierten Variable null. Dies gilt nicht nur für alle von ActionScript 3.0 definierten Klassen, sondern auch für alle von Ihnen erstellten benutzerdefinierten Klassen.

Der Wert null ist für Variable des Typs „Boolean“, „Number“, „int“ oder „uint“ nicht zulässig. Wenn Sie versuchen, einer solchen Variablen den Wert null zuzuweisen, wird der Wert in den Standardwert dieses Datentyps umgewandelt. Sie können den Wert null für Variablen des Typs „Object“ zuweisen. Wenn Sie versuchen, einer Variablen des Typs „Object“ den Wert undefined zuzuweisen, wird der Wert zu null umgewandelt.

Für Variable des Typs „Number“ gibt es eine besondere Funktion auf oberster Ebene namens isNaN(), die den booleschen Wert true zurückgibt, wenn die Variable keine Zahl ist. Andernfalls gibt sie false zurück.