Rheinwerk Design < openbook > Rheinwerk Design - Know-how für Kreative.
Know-how für Kreative

 << zurück
ActionScript 1 und 2 von Sascha Wolter (http://www.saschawolter.de/)
Objektorientierung und Codedesign mit Flash MX 2004
Buch: ActionScript 1 und 2

ActionScript 1 und 2
672 S., mit CD, Referenzkarte, 44,90 Euro
Rheinwerk Design
ISBN 3-89842-221-6
gp Kapitel 7 Werte und Datentypen
  gp 7.1 Variablen
    gp 7.1.1 Gültigkeitsbereich (engl. Scope)
    gp 7.1.2 Eigenschaften
    gp 7.1.3 Konstanten
    gp 7.1.4 Variablen mit set deklarieren
    gp 7.1.5 Variablen mit dem Zuweisungsoperator deklarieren
    gp 7.1.6 Lokale Variablen mit var deklarieren
    gp 7.1.7 Globale Variablen mit _global deklarieren
    gp 7.1.8 Variablen löschen
    gp 7.1.9 Den Typ einer Variablen ermitteln
  gp 7.2 Datentypen
    gp 7.2.1 Wahrheitswert (boolean)
    gp 7.2.2 Zahl (number)
    gp 7.2.3 Zeichenketten (string)
    gp 7.2.4 Null
    gp 7.2.5 Undefiniert (undefined)
    gp 7.2.6 Komplexe Datentypen (Objekte)
  gp 7.3 Typumwandlung
    gp 7.3.1 parseInt
    gp 7.3.2 parseFloat
    gp 7.3.3 Boolean (Funktion)
    gp 7.3.4 Number (Funktion)
    gp 7.3.5 String (Funktion)
    gp 7.3.6 Array (Funktion)
    gp 7.3.7 Object (Funktion)
  gp 7.4 Typisierung
    gp 7.4.1 Typen festlegen
    gp 7.4.2 Typisierung und Codehinweise
    gp 7.4.3 Laufzeit versus Kompilierung


Rheinwerk Design - Zum Seitenanfang

7.2 Datentypen  downtop

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 7.1   Primitive Datentypen beinhalten einen Wert, komplexe Datentypen zeigen auf eine Sammlung von weiteren Datentypen.

Die Daten in einer Anwendung dürfen unterschiedlichen Typs sein. Die Zutaten eines Rezeptes werden ja auch nicht ausschließlich in Gramm, sondern ebenfalls in anderen Einheiten wie Liter gemessen.

Kategorien

In Flash sind die Datentypen etwas abstrakter und lassen sich in zwei Kategorien unterteilen:

gp  Primitive Datentypen (auch einfache Datentypen, Standard-Datentypen oder Grund-Datentypen genannt)
gp  Komplexe Datentypen (auch zusammengesetzte Datentypen oder Referenz-Datentypen genannt)
primitive Datentypen

Die primitiven Datentypen beinhalten immer einen konkreten Wert der folgenden Typen:

gp  Wahrheitswert (boolean): Dieser Datentyp gibt an, ob etwas wahr oder falsch bzw. an oder aus ist.
gp  Zahl (number): Dieser Datentyp steht in ActionScript sowohl für Ganzzahlen als auch für Gleitkommazahlen.
gp  Zeichenketten (string): Dieser Datentyp steht in ActionScript für Texte. Die zugehörigen Werte werden immer in Anführungszeichen eingeschlossen.
gp  Null: Dieser Datentyp kann mit null nur einen einzigen Wert annehmen.
gp  Undefiniert (undefined): Dieser Datentyp kann mit undefined nur einen einzigen Wert annehmen.
// Boolescher Wert
maennlich = true;
// Zahl
alter = 29;
// Zeichenkette
name = "Sascha";
komplexe Datentypen

Die komplexen Datentypen sind eine Sammlung weiterer Eigenschaften (darum zusammengesetzte Datentypen) und beinhalten selber keinen Wert, sondern nur einen Zeiger auf die weiteren Daten (darum Referenz-Datentypen), die wiederum von einem beliebigen Typ sein dürfen. Flash unterscheidet hier standardmäßig zwischen den folgenden Typen:

gp  Movieclip (movieclip)
gp  Objekt (object)
gp  Funktion (function)

Dabei darf jeder dieser komplexen Datentypen wieder sämtliche primitive Datentypen wie beispielsweise Zeichenketten und Zahlen und komplexe Datentypen wie Movieclips, Objekte und Funktionen beinhalten – in diesem Fall spricht man bei diesen Wertebehältern nicht mehr von Variablen, sondern von Eigenschaften.

// Movieclip
_root.createEmptyMovieClip("mcBall", 1);
mcBall._x = 100;
mcBall._y = 200;
// Objekt
autor = new Object();
autor.maennlich = true;
autor.alter = 29;
autor.name = "Sascha";
// Funktion
function ermittleMinuten(tage) {
   return (tage*24*60);
}
Datentyp ermitteln

Den Datentyp ermitteln Sie entweder innerhalb des Testmodus (Steuerung Film testen) mit dem Menübefehl Fehlersuche Variablen auflisten, mit dem Debugger (Steuerung Fehlersuche) oder über den typeof-Operator:

meineVariable = 123;

trace(typeof meineVariable);


Rheinwerk Design - Zum Seitenanfang

7.2.1 Wahrheitswert (booleandowntop

Boolesche Werte benötigen Sie immer dann, wenn Daten nur zwei Zustände annehmen können. Umgangssprachlich spricht man bei diesen beiden Zuständen gerne auch von ein und aus oder wahr und falsch (darum auch Wahrheitswerte). Diese beiden Zustände werden durch die Konstanten false und true repräsentiert.

// Variablen vom Typ boolean
bezahlt = false;
// Eigenschaft einer Movieclip-Instanz vom Typ boolean
meinMoviClip._visible = true;

Mathematisch entsprechen die beiden Konstanten false und true den Werten 0 für false und 1 für true. Sie dürfen diese beiden Zahlen auch direkt verwenden. Bei einem strikten Vergleich (siehe »Operatoren« ab Seite 212) kann es dann aber zu Problemen kommen, da der Typ unterschiedlich ist (einmal boolean und einmal number). In der Regel ist das jedoch unerheblich, da Flash automatisch eine passende Typkonvertierung vornimmt.

Boolean-Objekt

Als Alternative zum primitiven Datentyp boolean bietet ActionScript ein Boolean-Objekt, das als komplexer Datentyp dient (siehe Kapitel 13.5, »Objekte«).


Rheinwerk Design - Zum Seitenanfang

7.2.2 Zahl (numberdowntop

Punkt statt Komma!

Für Zahlen bietet Flash im Gegensatz zu vielen anderen Programmiersprachen mit number nur einen primitiven Datentyp an. Dieser Datentyp umfasst sowohl Ganzzahlen (engl. Integer) als auch Gleitkommazahlen (engl. Float). Bitte beachten Sie, dass Gleitkommazahlen als Dezimaltrennzeichen im Gegensatz zum deutschsprachigen Komma einen angelsächsischen Dezimalpunkt verwenden!

// Ganzzahlen
alter = 29;
kontostand = -1000;
// Gleitkommazahlen
gewicht = 71.5;
temperatur = -10.5;

Der Zahl-Datentyp verhält sich weitestgehend wie das doppelt genaue 64-Bit-Format IEEE 754 (IEEE-Standard für binäre Gleitkommazahlen-Arithmetik). Dies bedeutet, dass jede Zahl in Flash insgesamt 15 Ziffern haben kann. Das wiederum hat keine Bedeutung bezüglich der Größe, sondern nur bezüglich der Genauigkeit. Denn beispielsweise die Zahl 1e15 (dies bedeutet 1000000000000000) besitzt zwar nur eine Ziffer und ist dennoch größer als 999999999999999. Zahlen mit mehr als 15 Ziffern müssen gerundet werden.

Unterschiedliche Formate für Zahlen

Flash bietet uns nur einen primitiven Datentyp für Zahlen an. Dieser Datentyp verwaltet Werte im IEEE 754-Format mit insgesamt 64 Bit. An einigen anderen Stellen verarbeitet Flash hingegen andere Zahlenformate – meist wird das aber vor uns verborgen, da diese ausschließlich intern abläuft. Beispielsweise vordefinierte Eigenschaften wie _alpha (Transparenz eines Movieclips) scheinen intern ein 16-Bit-Format zu verwenden. Dieses wird jedoch nach außen in Prozent umgerechnet. D.h., 100 entspricht dem internen Wert 255.

Wieder andere Stellen in Flash benutzen 31 Bit plus Vorzeichen. Dazu zählt die Tiefe eines Movieclips. Diese kann immer nur als Ganzzahl zwischen 2147483647 und -2147483647 liegen.

größte darstellbare Zahl

Die größte darstellbare Zahl in Flash ist 179769313486231 * 10308  – also eine Zahl mit insgesamt 309 Stellen vor dem Komma. Jede größere Zahl wird entweder abgerundet oder als Unendlichkeit interpretiert. Übrigens entspricht in ActionScript die Zahl 21024  der Unendlichkeit. Für die niedrigste negative Zahl gilt analog dasselbe.

kleinste darstellbare Zahl

Die kleinste darstellbare Zahl ist 494065645841247 * 10-324  . Falls ich mich nicht verzählt habe, ist das eine Zahl mit insgesamt 348 Nachkommastellen. Jede kleinere Zahl wird entweder aufgerundet oder als 0 angezeigt. Für die kleinste negative Zahl gilt auch hier analog dasselbe.


Tabelle 7.2   Wertebereich von Zahlen

  Höchste Zahl (positiv) Niedrigste Zahl (negativ)
Größte Zahl 179769313486231 * 10308  -179769313486231 * 10308 
Kleinste Zahl 494065645841247 * 10-324  -494065645841247 * 10-324 

Automatisches Runden von Zahlen

Beachten Sie, dass ActionScript aufgrund der internen Darstellung Zahlen häufig runden muss. Dies entspricht nicht immer den gelernten Regeln aus der Schule und kann deshalb vom erwarteten Ergebnis abweichen. Der Grund dafür ist wie bereits erwähnt die interne Speicherung.

Unendlichkeit

Für die Unendlichkeit bietet ActionScript mit Infinity ein vordefiniertes Schlüsselwort an. -Infinity entspricht der negativen Unendlichkeit. Unendliche Werte deuten meist auf einen Berechnungsfehler hin. Die Division durch null ergibt z.B. unendlich:

// Infinity
trace(1/0);
// -Infinity
trace(-1/0);
trace(Math.log(0));
Not a Number

Die Division durch null ergibt aber nur dann unendlich bzw. negativ unendlich, wenn nicht null durch null geteilt wird. In diesem Fall ist das Ergebnis NaN für »Not a Number« (keine Zahl):

// NaN
trace(0/0);
Scheinbar gleiche Zahlen sind ungleich

Es kommt immer wieder vor, dass scheinbar gleiche Berechnungen zu ungleichen Zahlen führen. Dies liegt oft daran, dass bereits die Berechnungen eigentlich keine korrekte Zahl, sondern NaN liefern (NaN ist zwar vom Typ her eine Zahl, aber eigentlich beschreibt es ja eine Zahl, die keine ist). Und da zwei Zahlen, die eigentlich keine Zahlen sind, auch nicht zwangsläufig gleich sein müssen, ergibt der Vergleich in diesem Fall immer, dass die beiden Zahlen ungleich sind:

a = 0/0;

b = 0/0;

trace(a == b);// Ergibt false

Andere Berechnungen und Typumwandlungen führen ebenfalls zu »keiner Zahl«:

// Berechnung
trace(Infinity/Infinity);
trace(Math.acos(2));
// Typumwandlung
trace(Number("Hallo"));
Wert endlich

Ob ein Wert endlich ist, überprüfen Sie mit der Funktion isFinite. Ob es sich um keine Zahl handelt, ermittelt die Funktion isNaN.


Tabelle 7.3   Globale Variablen des Datentyps Zahl (engl. Number)

Bezeichner Beschreibung
Infinity Positive Unendlichkeit (entspricht Number.POSITIVE_INFINITY).
-Infinity NegativeUnendlichkeit (entspricht Number.NEGATIVE_INFINITY).
NaN Keine Zahl (engl. not a number).

Schreibweise

Zahlen dürfen grundsätzlich nicht nur als Dezimalzahlen aus den Ziffern 0 bis 9 bestehend angegeben werden. Auch die hexadezimale Schreibweise mit 16 Ziffern (0 bis 9 und a bis f) sowie die oktale Schreibweise mit acht Ziffern (0 bis 7) sind erlaubt. Oktalzahlen beginnen immer mit einer führenden Null, Hexadezimalzahlen starten mit 0x (beachten Sie bitte, dass Hexadezimalzahlen in HTML-Dokumenten oft mit # beginnen):

// Dezimalzahlen
zahl = 123;
zahl = 123.4;
// Oktalzahlen
zahl = 01; // entspricht Dezimal 1
zahl = 011; // entspricht Dezimal 9
// Hexadezimalzahlen
zahl = 0xFF; // entspricht Dezimal 255;
zahl = 0xFF00FF; // beliebte Schreibweise für Farbwerte

Sollten Sie Zahlen zu anderen Basen als 8 (Oktal), 10 (Dezimal) oder 16 (Hexadezimal) benötigen, dann verwenden Sie die Funktion parseInt (siehe Seite 186).

Zehnerpotenzen

ActionScript stellt die Zehnerpotenzen von sehr kleinen bzw. sehr großen Zahlen (beispielsweise immer dann, wenn mehr als 15 Ziffern zur Darstellung vor dem Komma notwendig wären) mit einem e dar. Dieses e darf auch bei der Eingabe eingesetzt werden. Die Verwendung von 1e5 entspricht zum Beispiel der Zahl 100000, die auch als 1 * 10 mit einer Zehnerpotenz geschrieben werden kann.

Number-Objekt

Als Alternative zum primitiven Datentyp number bietet Flash auch ein Number-Objekt, das als komplexer Datentyp dient.


Rheinwerk Design - Zum Seitenanfang

7.2.3 Zeichenketten (stringdowntop

Zeichenketten beinhalten eine Kette beliebiger Zeichen, die nicht an Berechnungen teilhaben sollen. Dabei basiert die interne Darstellung auf der Unicode-Variante UTF-16.

Ein Nachname ist eine Zeichenkette. Postleitzahlen und Telefonnummern sind ebenfalls Zeichenketten, da mit ihnen keine Berechnungen durchgeführt werden. Dabei ist es unerheblich, dass sie oft ausschließlich aus Zahlen bestehen.

Um eine Zeichenkette zu definieren, wird sie in Anführungszeichen gebettet:

variableDieEineZeichenketteBeinhaltet = "Zeichenkette";

Anstatt der doppelten Anführungszeichen sind bei den meisten Programmiersprachen wie auch in ActionScript Hochkommata erlaubt:

variableDieEineZeichenketteBeinhaltet = 'Zeichenkette';

Innerhalb einer Zeichenkette darf das jeweilige Anführungszeichen dann aber nicht direkt, sondern nur mit Hilfe einer durch den Rückwärtsschrägstrich \ eingeleiteten Escape-Sequenz verwendet werden. Der Rückwärtsschrägstrich wird wiederum durch \\ dargestellt:

// erlaubte Zeichenketten
zeichenkette = "text";
zeichenkette = 'text';
zeichenkette = "text anführungszeichen ' ";
zeichenkette = "text anführungszeichen " ';
zeichenkette = "text anführungszeichen \" ";
zeichenkette = 'text anführungszeichen \' ';
// nicht erlaubte Zeichenketten
zeichenkette = "text anführungszeichen " ";
zeichenkette = 'text anführungszeichen ' ';
Zeilenumbruch

Von größer Bedeutung für mehrzeilige Texte ist der Zeilenumbruch, der auf vielfältige Art und Weise beschrieben werden darf:

// Zeilenumbruch
trace("erste Zeile\rzweite Zeile");
// Zeilenumbruch (Oktal)
trace("erste Zeile\015zweite Zeile");
// Zeilenumbruch (Hexadezimal)
trace("erste Zeile\x0dzweite Zeile");
// Zeilenumbruch (UTF-16)
trace("erste Zeile\u000dzweite Zeile");
newline

Für den Zeilenumbruch bietet ActionScript darüber hinaus noch eine Konstante namens newline an:

// Zeilenumbruch mit einer Konstante
trace("erste Zeile"+newline+"zweite Zeile");

Die Auto-Format-Option des ActionScript-Editors verwandelt Oktal-, Hexadezimal- und Unicode-Angaben soweit möglich in die passenden Steuerzeichen, so dass bei ihrem Einsatz beispielsweise aus \u000d die Escape-Sequenz \r wird.

Zeilenumbruch

Je nach Flash-Version verwendet ActionScript intern \n (ASCII 10) oder \r (ASCII 13) für den Zeilenumbruch. Seit Flash MX wird normalerweise \r eingesetzt.


Tabelle 7.4   Escape-Sequenzen

Escape-Sequenz Zeichen
\b Rückschritt (Backspace, ASCII 8)
\f Seitenvorschub (Form Feed, ASCII 12)
\n Zeilenvorschub (Line Feed, ASCII 10)
\r Wagenrücklauf (Carriage Return, ASCII 13)
\t Tabulator (Tab, ASCII 9)
\" Doppeltes Anführungszeichen
\’ Einfaches Anführungszeichen
\\ Rückwärtsschrägstrich
\000 bis \377 Ein oktaler Byte-Wert
\x00 bis \xFF Ein hexadezimaler Byte-Wert
\u0000 bis \uFFFF Ein 16-Bit-Unicode-Zeichen in Hexadezimalschreibweise

String-Objekt

Als Alternative zum primitiven Datentyp string bietet Flash auch ein String-Objekt, dass als komplexer Datentyp dient (siehe Seite 189). Die zahlreichen Methoden und Eigenschaften des String-Objektes stehen für den primitiven Datentyp ebenfalls zur Verfügung.


Rheinwerk Design - Zum Seitenanfang

7.2.4 Null  downtop

Der Datentyp null mit dem einen Wert null wird immer dann eingesetzt, wenn explizit ausgedrückt werden soll, dass ein Wert bei Funktionsaufrufen fehlt bzw. eine Referenz nicht vorhanden ist.

Der Wert null unterscheidet sich von der Zahl 0 und einer leeren Zeichenkette, so dass ein Vergleich das Ergebnis falsch (engl. false) ergibt.

Die strikte Gleichheit (===) verhindert, dass null verglichen mit undefined das Ergebnis true ergibt, da in diesem Fall auch der unterschiedliche Typ berücksichtigt wird.


Tabelle 7.5   Vergleiche bei null und undefined

Vergleich Ergebnis bei null und undefined Beispiel mit null Beispiel mit undefined
Zahl 0 false trace(null == 0); trace(undefined == 0);
leere Zeichenkette "" false trace(null == ""); trace(undefined == "");
null true trace(null == null); trace(null == undefined);
undefined true trace(null == undefined); trace(undefined == undefined);


Rheinwerk Design - Zum Seitenanfang

7.2.5 Undefiniert (undefineddowntop

Der Datentyp undefined ist dem Typ null sehr ähnlich und besitzt ebenfalls mit undefined nur einen Wert. Werte sind immer dann undefiniert, wenn Sie noch nicht gesetzt wurden. D.  h. wenn einer Variable noch kein Wert zugewiesen wurde.

Um den Inhalt einer Variablen zu löschen, ohne die Variable selbst zu entfernen, sollte null und nicht undefined zugewiesen werden.

Das Verhalten von undefined und null ist bei Vergleichen identisch (siehe Tabelle »Vergleiche bei null und undefined«). Nur bei der Typkonvertierung in eine Zeichenkette ergeben sich Unterschiede zueinander und zu ECMAScript.


Tabelle 7.6   Typkonvertierung bei null und undefined

Typ String Number Boolean
null "null" 0 false
undefined Bis inkl. Flash 6 "", seit Flash 7 wie bei ECMAScript "undefined" Bis inkl. Flash 6 0, seit Flash 7 wie bei ECMAScript NaN false


Rheinwerk Design - Zum Seitenanfang

7.2.6 Komplexe Datentypen (Objektetoptop

Grundsätzlich handelt es sich bei allen nicht primitiven Datentypen in Flash um Objekte. Oder um noch genauer zu sein, um Vorkommen (engl. Instance) eines Prototyps. Zwar unterscheidet der typeof-Operator hier nur zwischen den Typen object, function und movieclip, doch es gibt eine große Anzahl weiterer Möglichkeiten, die sich hinter dem Datentyp object verbergen. Dazu zählen die Kernobjekte (engl. Coreobjects) aus ECMAScript und Flash-spezifische Erweiterungen. Außerdem steht es dem Entwickler frei, weitere Objekte zu entwerfen.


Tabelle 7.7   Kernobjekte in Flash und ECMAScript

Objekt Bemerkung
das globale Objekt seit Flash 6 (undokumentiert)
Object seit Flash 5
Array seit Flash 5
Boolean seit Flash 5
Date seit Flash 5
Error seit Flash 7
Function seit Flash 6
Math seit Flash 4 (jedoch erst seit Flash 5 programmierbar)
Number seit Flash 5
RegExp nicht vorhanden
String seit Flash 5


Tabelle 7.8   Anwendungsspezifische Objekte in Flash (integrierte Klassen)

Objekt Bemerkung
Accessibility seit Flash 6
Button seit Flash 6 (grafisch bereits seit Flash 1)
Camera seit Flash 6
Capabilities seit Flash 6
Color seit Flash 5
ContextMenu seit Flash 7
Cookie seit Flash 5 (undokumentiert)
CustomActions seit Flash 6
Key seit Flash 5
LoadVars seit Flash 6
LocalConnection seit Flash 6
Microphone seit Flash 6
Mouse seit Flash 5
MovieClip seit Flash 3
MovieClipLoader seit Flash 7
NetConnection seit Flash 6
NetStream seit Flash 6
PrintJob seit Flash 7
Selection seit Flash 5
SharedObject seit Flash 6
Sound seit Flash 5 (akustisch bereits seit Flash 1)
Stage seit Flash 6
System seit Flash 6
TextField seit Flash 6
TextFormat seit Flash 6
TextSnapshot seit Flash 6 (jedoch erst seit Flash MX 2004 programmierbar)
Video seit Flash 6
XML seit Flash 5
XMLNode seit Flash 5 (undokumentiert)
XMLSocket seit Flash 5

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: ActionScript 1 und 2
ActionScript 1 und 2
bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: JavaScript






 JavaScript


Zum Rheinwerk-Shop: jQuery






 jQuery


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Rheinwerk-Shop: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern