7.4 Typisierung
Mit Flash MX 2004 hat Macromedia Typisierung in ActionScript eingebaut. Typisierung erlaubt es, den Typ einer Variablen festzulegen, um eine falsche Verwendung zu vermeiden. Zum einen verhindert Flash so bereits beim Veröffentlichen bzw. beim Kompilieren, dass Methoden oder Eigenschaften verwendet werden, die gar nicht existieren, und zum anderen zeigt Flash auch an, wenn die Parameter oder Rückgabewerte von Funktionen oder Methoden falsch sind. Beispiel:
var menge:Number;
// Folgende Anweisung ist erlaubt
menge = 123;
// Folgende Anweisung erzeugt einen Fehler
menge = "123";
Siehe ActionScript 2.0
ab Seite 396
Gerade bei sehr großen Projekten mit mehreren Entwicklern ist die Typisierung ein mächtiges Werkzeug, um Fehler zu vermeiden. Doch leider funktioniert die Typsicherheit nicht zur Laufzeit, und zum anderen unterstützt Flash die typsichere Programmierung ohnehin nur, wenn die ActionScript 2.0-Option im Register Flash des Menüs Datei • Voreinstellungen für das Veröffentlichen aktiviert ist. Diese steht erst mit Flash MX 2004 zur Verfügung, funktioniert aber auch bei Flash 6-Projekten.
7.4.1 Typen festlegen
Den Typ einer Variablen oder Eigenschaft legen Sie durch eine Deklaration mit dem Schlüsselwort var fest, indem Sie dem Bezeichner getrennt durch einen Doppelpunkt den Typ bei der Erzeugung zuweisen:
var bezeichner:Typ;
Natürlich dürfen Sie der Variablen auch gleich einen Wert zuweisen:
var bezeichner:Typ = Wert;
Dies sollte aber wegen der besseren Lesbarkeit besser in zwei aufeinander folgenden Anweisungen geschehen:
var bezeichner:Typ;
bezeichner = Wert;
Anstelle des Typs geben Sie immer den Klassennamen des zugrunde liegenden Typs an:
var meineZahl:Number;
var meineZeichenkette:String;
var meinObjekt:Object;
var meineListe:Array;
Die Parameter einer Funktion typisieren Sie auf ganz ähnliche Art und Weise, indem Sie für jeden Parameter den Typ ebenfalls getrennt durch einen Doppelpunkt angeben:
function erzeugeSterne(ziel:MovieClip, anzahl:Number) {
var i:Number;
var x:Number;
var y:Number;
var mc:MovieClip;
for (i=anzahl; i>0; i--) {
x = Math.random()*550;
y = Math.random()*400;
// Ein Symbol mit dem Verknüpfungsnamen "stern" wird benötigt
mc = ziel.attachMovie("stern", "stern"+String(i), i);
mc._x = x;
mc._y = y;
}
}
erzeugeSterne(_root, 10);
Rückgabewert
Sollte eine Funktion einen Rückgabewert haben, dann können Sie diesen ebenfalls typisieren:
// Berechne den Body-Mass-Index für Männer
function berechneBMI(groesse:Number):Number {
var bmi:Number;
bmi = (groesse-100)/1.05;
return bmi;
}
meinBMI = berechneBMI(178);
Und sollte eine Funktion keinen Rückgabewert besitzen, dann schadet es nicht, dies ebenfalls durch den Typ Void anzugeben:
function gibNichtsZurueck():Void {
// Anweisungen
}
Ohne ActionScript 2.0 geht nur die Hälfte
Leider ist eine Typisierung mit selbst erstellten Klassen nur möglich, wenn Sie diese Klassen mit ActionScript 2.0 und nicht durch Prototypen in ActionScript 1 erzeugt haben. Ohne ActionScript 2.0 beschränkt sich die Typsicherheit auf die in Flash bereits eingebauten Typen.
7.4.2 Typisierung und Codehinweise
Durch die Typisierung erreichen Sie, dass Flash Codehinweise anzeigt. Sofern Flash den angegebenen Typ kennt, blendet der ActionScript-Editor dann die verfügbaren Methoden und Eigenschaften ein (siehe Codehinweis im Kapitel »Grundlagen« auf Seite 85).
7.4.3 Laufzeit versus Kompilierung
Die Typsicherheit von Flash beschränkt sich leider auf das Kompilieren, also auf den Moment, in dem Sie Ihre Anwendung als SWF-Datei veröffentlichen. In diesem Fall gibt Flash alle erkannten Typfehler im Ausgabefenster aus.
Leider lässt sich der Compiler von Flash jedoch recht einfach »austricksen«, so dass zur Laufzeit weiterhin Typfehler möglich sind. Diese erkennt Flash jedoch dann nicht mehr. Es reicht bereits aus, Bezeichnernamen dynamisch zu erzeugen, um die Typsicherheit zu umgehen:
var meineZahl:Number;
this["meineZahl"] = "Ich bin keine Zahl!";
Ebenfalls ist es mit der Typsicherheit dahin, wenn die Werte zur Laufzeit von außen, wie z.B. einem Server, eingelesen werden. Doch auch diese Schwierigkeiten lassen sich zumindest teilweise mit ein wenig Disziplin umgehen. Mehr dazu finden Sie in den Kapiteln 18, »Codedesign«, und 16, »ActionScript 2.0«.
Typfehler zur Laufzeit ermitteln
Im Zusammenhang mit Flex hat Macromedia zumindest unter Windows eine Möglichkeit eingeführt, den Programmablauf inkl. Laufzeitfehlern zu protokollieren, sofern der Flash Debug Player installiert ist und die SWF-Datei außerhalb der Entwicklungsumgebung abspielt.
Innerhalb des Benutzerordners (unter Windows XP ist dies meist das Verzeichnis C:\Dokumente und Einstellungen\[Benutzername]) findet sich die Datei mm.cfg, in der die dafür notwendigen Einstellungen festgelegt werden. Sollte diese Datei bei Ihnen nicht vorhanden sein, dann können Sie diese auch selber anlegen.
Die folgenden zwei Zeilen aktivieren einen Fehlerbericht und das Protokollieren von trace-Anweisungen:
ErrorReportingEnable=1
TraceOutputFileEnable=1
Die maximale Anzahl an Meldungen legt MaxWarnings=500 fest.
Normalerweise schreibt Flash dann alle Meldungen in die Datei flashlog.txt, die sich im selben Verzeichnis wie die Datei mm.cfg befindet. Sie können über den Parameter TraceOutputFileName=C:\log.txt aber auch eine andere Datei angeben.
|