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

Inhaltsverzeichnis
Vorwort
1 Flash für ActionScript
2 ActionScript in Flash
3 Flash Pro für ActionScript
4 Grundlagen der Programmierung
5 Einfache Filmsteuerung
6 Bildschirme und Präsentationen
7 Drucken und das Kontextmenü
8 Textfelder
9 Tasten
10 Datum und Zeit
11 Rechnen
12 Farbe wechseln und Drag
13 Zeichnen und Zufall
14 Von Mäusen und Duplikaten
15 Kollisionstest
16 Sound
17 Video
18 Externe Filme
19 Vorladen und Player erkennen
20 Formulare und UI-Komponenten
21 Komponenten anpassen
22 Formulare versenden
23 Warenkorb
24 Ausblick auf ActionScript 3
Stichwort
Ihre Meinung?

Spacer
 <<   zurück
Einstieg in ActionScript von Christian Wenz, Tobias Hauser, Armin Kappler
Aktuell zu Flash 8
Buch: Einstieg in ActionScript

Einstieg in ActionScript
brosch., mit CD und QuickFinder und Referenz
416 S., 24,90 Euro
Rheinwerk Design
ISBN 978-3-89842-774-6
Pfeil 4 Grundlagen der Programmierung
  Pfeil 4.1 Variablen
  Pfeil 4.2 Kommentare
  Pfeil 4.3 Operatoren
  Pfeil 4.4 Fallunterscheidungen
  Pfeil 4.5 Schleifen
  Pfeil 4.6 Funktionen
  Pfeil 4.7 Objekte
  Pfeil 4.8 Strings und ihre Besonderheiten
  Pfeil 4.9 Arrays


Rheinwerk Computing - Zum Seitenanfang

4.9 Arrays  topZur vorigen Überschrift

Ein Array gehört wie ein Objekt zu den komplexen Datentypen, da es mehrere Werte aufnehmen kann. Ein Objekt speichert die unterschiedlichen Werte in verschiedenen Eigenschaften; die Werte sind über den Namen der Eigenschaft zugänglich. Bei einem Array gibt es dagegen einen Index (synonym auch Schlüssel genannt). Der praktische Vorteil von Arrays liegt darin, eine Menge an Daten speichern zu können, die zusammengehören. Eines unter vielen Beispielen sind Koordinaten zum Positionieren.


Fehlerquelle

Der Index eines Arrays beginnt mit der 0. Der Index eines Arrays beginnt mit der 0! Der … okay, genug wiederholt, aber dies ist wirklich eine tückische Fehlerquelle.


Die folgende Zeile zeigt eine Möglichkeit, ein Array zu definieren; Sie instanziieren ein Array-Objekt:

var tage_array:Array = new Array("Montag", "Dienstag", "Mittwoch", "Donnerstag");

Abbildung 4.36 Das Element mit dem Index 1 ist das zweite Element im Array.

So liest sich die Syntax auf Deutsch:

  • Die Variable tage_array erhält den Datentyp Array.
  • Ihr wird ein neues Array-Objekt zugewiesen,
  • das Array erhält die Strings »Montag«, »Dienstag« etc. als Werte (synonym auch Elemente) zugewiesen.

Der Index wird automatisch vergeben, er beginnt bei 0: »Montag« ist also die 0, »Dienstag« die 1 und so weiter.

Sie benötigen den Index, um auf einen Wert im Objekt zuzugreifen. Die folgende Anweisung gibt das Element mit dem Index 1 aus:

trace(tage_array[1]);

Objekttauglich

Der Array-Zugriffsoperator lässt sich ebenso für den Zugriff auf Objekt-Eigenschaften einsetzen: Objekt["Eigenschaftsname"]. Er kommt in der Praxis zum Einsatz, wenn der Eigenschaftsname dynamisch gebildet wird, beispielsweise bei einer Animation. Er kann ebenfalls eingesetzt werden, um Variablennamen dynamisch zu bilden. Ein Beispiel finden Sie in Kapitel 13, »Zeichnen und Zufall«, im Beispiel »Zufällige Formen animieren«.


Welches Element ist das? Richtig, der »Dienstag« (Sie wissen ja: Der Index eines Arrays ...).

In den eckigen Klammern steht der so genannte Array-Zugriffsoperator. Sie können ihn auch einsetzen, um ein neues Array zu erstellen:

var tage_array:Array = ["Montag", "Dienstag", "Mittwoch", "Donnerstag"];

Wir verwenden in diesem Buch allerdings die Variante mit dem Instanziieren eines neuen Array-Objekts.

Datentypen und Arrays

Das Array selbst hat, wie schon erwähnt, den Datentyp Array. Die Werte des Arrays können dagegen jeden beliebigen Datentyp annehmen. Hier stellt die automatische Typisierung von ActionScript den Datentyp fest. Strikte Typisierung für Array-Inhalte oder die Beschränkung auf einen Datentyp gibt es auch in ActionScript 2.0 und damit in Flash MX 2004 und Flash 8 nicht.

Ein einfaches Beispiel zeigt, wie »tolerant« ActionScript ist:

var tage_array:Array = ["Montag", 13];
var tag_num:Number = tage_array[1];
trace(tag_num);

Das Array enthält ein Element mit dem Datentyp String und eines mit Number. Die Zahl landet anschließend in einer Variablen mit dem Datentyp Number und wird mit trace() ausgegeben. ActionScript würde allerdings tolerieren, wenn die Zahl einer Variablen mit dem Datentyp String zugewiesen wird:

var tag_str:String = tage_array[1];

Diese tolerante Haltung bei der Typisierung in Arrays hat Vorteile: Die Entwicklung geht schnell und Sie müssen auf wenig achten. Andere Programmiersprachen, beispielsweise Java oder C#, interpretieren die strikte Typisierung wesentlich stärker: Dort darf ein Array überhaupt nur Elemente eines Datentyps besitzen.

Abbildung 4.37 Die Zahl wird trotz des »falschen« Datentyps anstandslos ausgegeben.

Wie Sie sehen, hat Macromedia in Flash 8 und MX 2004 einen Mittelweg zwischen strikter Typisierung und automatischer Typisierung gewählt. Das wird Anhänger der strikten Typisierung vielleicht nicht zufrieden stellen, ist aber ein Kompromiss, um ActionScript 2.0 einfacher zu lernen.

Mit Arrays arbeiten

Um mit Arrays richtig arbeiten zu können, benötigen Sie den Array-Zuweisungsoperator, also die eckigen Klammern, sowie die Eigenschaften und Methoden des Array-Objekts.

Wir zeigen Ihnen im Folgenden einige Möglichkeiten, einfache Aufgaben mit Arrays zu erledigen. Grundlage ist der Array mit den vier Wochentagen »Montag« bis »Donnerstag«.

  • Um ein neues Objekt hinzuzufügen, schreiben Sie den Index in eckige Klammern und weisen den Wert zu:
tage_array[4] = "Freitag";
  • Um den Wert eines Array-Elements zu ändern, geben Sie den Index an und bestimmen einen neuen Wert. Die folgende Zeile ändert beispielsweise »Montag« in die englische Variante »Monday«:
tage_array[0] = "Monday";
  • Sie können einen Array auch leer definieren oder als Parameter beim Array-Objekt in Klammern die Zahl der Elemente angeben:
var tage_array:Array = new Array();

Abbildung 4.38 Das Aktionen-Bedienfeld bietet schnellen Zugriff auf die Eigenschaften und Methoden des Array-Objekts.

  • oder:
var tage_array:Array = new Array(7);
  • Wenn Sie ein Element am Ende hinzufügen möchten, können Sie mit der Eigenschaft length die Zahl der Elemente im Array herausfinden. Vorsicht, length ist um 1 größer als der Index des letzten Array-Elements , da der Index des ersten Elements bei 0 beginnt, length aber die Elemente zählt, beginnend mit 1.
tage_array[tage_array.length] = "Freitag"; //"Freitag" hat Index 4
  • Vorsicht: Ist ein Array leer definiert, hat aber eine bestimmte Zahl an Elmenten, entspricht die Länge dieser Zahl der Elemente, obwohl die Elemente alle den Wert undefined haben.
  • Die Methode push(Wert1, Wert2, ...) dient dazu, ein oder mehrere Elemente an ein Array anzufügen. Hier müssen Sie sich nicht um das Ende des Arrays kümmern. Die Methode liefert als Rückgabewert die geänderte Länge des Arrays; diesen Wert können Sie verwenden, wenn Sie ihn benötigen.
tage_array.push("Freitag", "Samstag");  //Index 4 und 5
  • Die Methode unshift() fügt am Anfang eines Arrays ein oder mehrere Elemente hinzu. Der Rückgabewert der Methode ist die Länge des Arrays:
tage_array.unshift("Samstag", "Sonntag");  //Index 0 und 1
  • Um das erste oder letzte Element eines Arrays zu löschen, verwenden Sie die Methode shift() beziehungsweise pop(). Als Rückgabewert liefern diese Methoden den Wert des Elements.
  • Die Reihenfolge der Elemente im Array ändern Sie mit der Methode reverse():
tage_array.reverse(); //"Donnerstag" hat Index 0, "Montag" Index 3
Schleifen und Arrays

Weitere Methoden

Für Arrays gibt es noch weitere Methoden. Sie finden sie im Aktionen-Bedienfeld unter Integrierte Klassen • Kern • Array • Methoden und von dort per Kontextmenü auch ganz einfach in der Hilfe.


Wenn Sie sich um jedes Element eines Arrays einzeln kümmern müssen, ist ein Array nicht wesentlich praktischer als eine Vielzahl von Variablen. Arrays spielen ihre Stärke aus, wenn Sie die Elemente automatisiert durchgehen können. Das bewährte Mittel für diesen Zweck sind Schleifen. Das folgende einfache Beispiel gibt alle Elemente eines Arrays aus:

var tage_array:Array = new Array("Montag", "Dienstag", "Mittwoch", "Donnerstag");
for (var i = 0; i < tage_array.length; i++) {
   trace(tage_array[i]);
}

Sehen Sie sich genauer an, wie die for-Schleife arbeitet:

Abbildung 4.39 Mit einer Schleife durchlaufen Sie alle Array-Elemente und geben sie aus.

  • In der Startanweisung wird eine Zählervariable i mit dem Wert 0 initialisiert.
  • Wenn die Zählervariable kleiner als die Zahl der Elemente im Array ist (i < tage_array.length, hier also kleiner 4),
  • wird das Element mit dem Index des aktuellen Werts der Zählervariablen ausgegeben. Im ersten Schleifendurchlauf ist der Wert von i=0, also gibt die Anweisung das erste Element des Arrays aus.
  • Dann erhöht sich die Zählervariable um 1
  • und der nächste Schleifendurchlauf beginnt.

Für Arrays und Objekte gibt es eine eigene Schleifenart: die for-in-Schleife. Sie liest die Schlüssel aller Elemente eines Arrays nacheinander in eine Variable (auch Iterator) aus. Achten Sie auf das unscheinbare Schlüsselwörtchen in; es ist das Herzstück dieser Schleife. Die Schleife endet, wenn keine Elemente mehr vorhanden sind:


for-in und Objekte

In Objekten geht die for-in-Schleife die Eigenschaften durch. Davon schließt Flash die Methoden und Eigenschaften des Array-Objekts aus dem letzten Abschnitt und einige Eigenschaften von anderen fertigen Objekten wie MovieClips aus.


for (Variable in Array) {
   Anweisungen;
}

Die for-in-Schleife ist etwas schneller als die for- oder while- Schleife einzusetzen. Allerdings folgt das obligatorische »Aber« sofort: Wenn Sie den Array der Wochentage mit dieser Schleife auslesen, werden die Tage in der falschen Reihenfolge ausgegeben:

for (var element in tage_array) {
   trace(tage_array[element]);
}

Abbildung 4.40 Die for-in-Schleife geht den Array von hinten nach vorne durch.

In vielen Anwendungen ist die Reihenfolge, in der die Array-Elemente durchlaufen werden, nicht von Bedeutung. Wenn es aber wichtig ist, gibt es eine Umgehungsmöglichkeit: Sie kehren die gelieferten Indizes um und verwenden dazu die Länge des Arrays. Das sieht dann so aus:

for (var element in tage_array) {
   trace(tage_array[tage_array.length – 1 – element]);
}

Abbildung 4.41 Jetzt stimmt die Reihenfolge.

Die for-in-Schleife verwöhnt bei Arrays und Objekten nicht nur mit sehr wenig Tipparbeit, sie ignoriert auch Array-Elemente, die den Wert undefined besitzen. Eine for- oder while-Schleife, die sich nur nach der Zahl der Elemente richtet, würde diese Elemente mit ausgeben.

Assoziative Arrays

Ein assoziatives Array verwendet keine aufsteigenden Zahlen als Index, sondern Strings. Sie können die Elemente auf zwei verschiedene Arten definieren:

1. mit eckigen Klammern, also mit dem Array-Zuweisungsoperator:
       
var tage_array:Array = new Array();
tage_array["Januar"] = 31;
tage_array["Februar"] = 28;
2. oder mit Punktsyntax, wie bei den Eigenschaften eines Objekts:
       
var tage_array:Array = new Array();
tage_array.Januar = 31;
tage_array.Februar = 28;

Der Zugriff erfolgt auf die gleiche Weise mit eckigen Klammern oder Punktsyntax. Beachten Sie allerdings einige Besonderheiten von assoziativen Arrays:

  • Ein assoziatives Element wird von der length-Eigenschaft nicht gezählt. Um diese Elemente in einer Schleife auszugeben, benötigen Sie eine for-in-Schleife.
  • Assoziative und per Index gezählte Elemente lassen sich mischen.
  • Sortiermethoden funktionieren bei assoziativen Arrays nicht. Die Elemente werden in der Reihenfolge gespeichert, in der sie erstellt wurden.
Multidimensionale Arrays

Ein letztes Konzept im Zusammenhang mit Arrays möchten wir Ihnen hier präsentieren: multidimensionale Arrays. Hinter dem vielschichtigen Namen verbergen sich einfach nur ineinander verschachtelte Arrays.

Das folgende Beispiel zeigt, wie es funktioniert:

var tage_array:Array = new Array("Montag", "Dienstag", "Mittwoch", "Donnerstag");
var days_array:Array = new Array("Monday", "Tuesday", "Wednesday", "Thursday");
var multi_array:Array = new Array(tage_array, 
days_array);

Zuerst definieren Sie zwei normale Arrays, die dann die Elemente eines weiteren Arrays bilden. Der Zugriff ist sehr einfach, da Sie lediglich zwei Indizes der verschachtelten Arrays hintereinander schreiben müssen:

trace(multi_array[0][3]);

Die obige Zeile greift zuerst auf das erste Element des multidimensionalen Arrays multi_array zu. Das ist der Array tage_array. Von diesem Array wird wiederum das dritte Element ausgelesen.

Abbildung 4.42 Das dritte Element des ersten Arrays ist der Donnerstag.

Sie können ein multidimensionales Array übrigens schneller definieren:

var multi_array = ["Element1", ["Element21", "Element22"]];

Was ist in diesem Beispiel das Element multi_array[1][1]? Richtig: »Element22«. Das Beispiel können Sie genauso gut mit dem Konstruktor new realisieren:

var multi_array = new Array("Element1", new Array("Element21", "Element22"));

Praxis

In Kapitel 23, »Warenkorb«, finden Sie ein Beispiel für den Einsatz eines multidimensionalen Arrays.


 



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 <<   zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: ActionScript 3 – Das Praxisbuch
ActionScript 3
Das Praxisbuch

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 2006
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