Professionelle Webentwicklung mit Adobe Flash CS4

mitp Grafik Professionelle Webentwicklung mit Adobe Flash CS4 inkl. ActionScript 3, XML, PHP und MySQL von Herbert Mitschke 1. Auflage Professionell...
Author: Emil Ludo Feld
1 downloads 0 Views 2MB Size
mitp Grafik

Professionelle Webentwicklung mit Adobe Flash CS4 inkl. ActionScript 3, XML, PHP und MySQL von Herbert Mitschke 1. Auflage

Professionelle Webentwicklung mit Adobe Flash CS4 – Mitschke schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG Thematische Gliederung: Webprogrammierung

mitp/bhv 2009 Verlag C.H. Beck im Internet: www.beck.de ISBN 978 3 8266 5090 1

Inhaltsverzeichnis: Professionelle Webentwicklung mit Adobe Flash CS4 – Mitschke

Herbert A. Mitschke

inklusive DVD-ROM

Professionelle Webentwicklung mit

Adobe Flash CS4 inkl. ActionScript 3, XML, PHP und MySQL

Von den Programmier-Grundlagen zur professionellen Webentwicklung Datenmanagement mit Flash, ActionScript, XML, PHP und MySQL Auf der DVD-ROM: 30-Tage-Test-Version von Adobe Flash CS4 Professional sowie die Übungen und Beispiele aus dem Buch

Kapitel 3

Programmierung – Die Grundlagen 3.1 3.2

Erste Schritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

92 95

3.3 3.4

Programmelemente . . . . . . . . . . . . . . . . . . . . . . . . Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

98 133

91 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.1 Erste Schritte Ein Programm ist eine Ansammlung von Befehlen, die einem Computersystem Anweisungen geben, was getan werden soll. Dieses Kapitel soll Ihnen die ersten und damit entscheidenden Schritte zum Erlernen der Grundlagen der Programmierung geben.

Hinweis

Befehle und Anweisungen

Wenn Sie mit diesem Thema schon sehr vertraut sind, können Sie dieses Kapitel getrost überspringen. Wenn Sie allerdings noch nicht mit ActionScript 3.0 zu tun hatten, könnte Sie die eine oder andere Information doch interessieren. ActionScript 3.0 ist jetzt zwar mittlerweile nach dem ECMA-Standard entwickelt, aber dennoch sind einige Dinge integriert, die nur hier in ActionScript zu finden sind. Der Begriff Befehl stammt ja eigentlich aus dem militärischen Sprachgebrauch und hat etwas Endgültiges. »Ich befehle Dir etwas« ist unwiderruflich. Sich einem Befehl zu widersetzen, hieß zum Beispiel beim Militär, das Risiko strengster Sanktionen einzugehen. Welche Sanktionen wollen Sie jedoch an einen Computer verhängen? Gut, Sie könnten ihm drohen, ihn zu verkaufen oder ihn aus dem Fenster zu werfen. Aber er ist ja »nur« eine Maschine, also würde das Ihnen wahrscheinlich mehr weh tun als ihm. Für den Computer hat es zum Glück keine Bedeutung, ob Sie ihn um etwas bitten oder ob Sie ihm den Befehl in den DVD-ROM-Schacht brüllen. Er reagiert nur auf die strukturierte Anordnung von 0 und 1 und diese Anordnung muss ihn auf digitalem Wege erreichen. Wenn Sie die Sprache nicht richtig beherrschen, die er benötigt, passiert gar nichts oder im Falle von Fehlerhaftigkeit lediglich die Angabe einer Fehlermeldung. Und selbst diese Fehlermeldung dringt nicht in ein irgendwie geartetes emotionales Bewusstsein unseres maschinellen Helfers. Nichts! Mit stoischer Ruhe wartet er auf neue Anweisungen, auf die nächsten Befehle, auf weitere Eingaben von 0 und 1. Und genau darum geht es bei der Entwicklung von Code: anzuerkennen, dass der Computer genau so gut ist wie der Entwickler, der davor sitzt, bzw. wie die Entwickler, die sein Betriebssystem gestaltet haben.

Programmiersprachen

Da die reine Maschinensprache nur aus Nullen und Einsen besteht, wurden unterschiedlichste Programmiersprachen entwickelt, die alle etwas gemeinsam haben: Sie machen es möglich, dass Sie als Code-Entwickler Ihre Befehle in einer der menschlichen Denkweise angepassten Form einsetzen können und der Computer das empfangene Code-Material zurückverwandelt in das, was er einzig und allein versteht: 0 und 1. Wie in jedem Handwerk müssen Sie Ihr Handwerkszeug beherrschen. Es gibt jedoch einen entscheidenden Unterschied zwischen Ihnen als Programmierer und einem Schreiner: Sie können die letzten Schritte mühelos rückgängig machen, der Schreiner nur mit großer Mühe.

Rückgängig

Wenn Sie einen Befehl falsch schreiben oder ein Sprachelement an der falschen Stelle einsetzen, gibt es immer noch (Strg)+(Z) (Windows) oder (Ü)+(Z) (Macintosh) und Sie versuchen es noch einmal. Wenn der Tisch fehlerhaft lackiert ist, landet er wahrscheinlich beim Brennholz. Für Sie ein schwacher

92 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3 . 1 E r s t eS c h r i t t e

Trost, wenn Sie nachts um drei den dreiundachtzigsten Versuch unternehmen, Ihrem Computer die richtige Lösung zu »befehlen«.

Von ActionScript 1.0 zum ECMA-Standard Die ECMA, die European Computer Manufacturers Association, ist eine internationale Organisation, der Hersteller von Hard- und Software angehören. Mitglieder sind unter anderem Microsoft und Netscape. Die ECMA bemüht sich zum Beispiel um einen einheitlichen Standard für JavaScript, der unter dem Namen ECMA-262 veröffentlicht wurde und auch als ECMAScript bekannt ist.

Kurze Historie Als Macromedia im Jahre 2000 seine Version 5 von Flash mit einem komplett neuen Interface und einem Debugger für die ActionScript-Programmierung vorstellte, war die Fachwelt begeistert. Obwohl die Umstellung wegen der neuen Oberfläche und der veränderten Syntax zum Teil einige Mühe machte, wurde der Aufwand dafür nicht gescheut und die neue Version konnte aufgrund der größeren »Universalität« und der Anpassung an gebräuchliche Programmiertechniken problemlos in den Arbeitsalltag der Webdesigner, Grafiker und Entwickler integriert werden. Besonders die Anpassung an die international gültige ECMA-262-Norm, der das weit verbreitete JavaScript bereits schon länger unterlag, brachte neue Impulse für die Weiterverbreitung von Flash und seinem Webbrowser-PlugIn.

ECMA-262-Norm

Diese Entwicklung hat entscheidend dazu beigetragen, dass Flash auch von Programmierern ernst genommen wurde, die bereits mit anderen Sprachen wie Java oder C++ vertraut waren. Auch die zu diesem Zeitpunkt bereits einsetzende Entwicklung und Einführung der Sprache XML (Extensible Markup Language) wurde bei der Umsetzung der neueren ActionScript-Versionen berücksichtigt. Mit der Version Flash MX, die im März 2002 von Macromedia herausgebracht wurde, wurde ActionScript endgültig in den Kreis der anerkannten Programmiersprachen aufgenommen. Die noch stärkere Anpassung an den bereits genannten ECMA-Standard sowie die Integration einer umfangreichen Funktionsbibliothek trug dazu entscheidend bei. Ein entscheidendes Manko gegenüber anderen Sprachen blieb jedoch bestehen: ActionScript bot bis zu diesem Zeitpunkt noch keine Möglichkeiten zur objektorientierten Programmierung und ließ damit noch einiges an Potenzial vermissen. Erst mit der Markteinführung von Flash MX 2004 Professional im Oktober 2004 wurde auch dieser Anforderung Rechnung getragen. Das neu entstandene ActionScript 2.0 verfügte von diesem Zeitpunkt an über OOP-Komponenten und über eine javaähnliche Syntax.

ActionScript 2.0 seit 2004 mit Object Oriented Programming (OOP)

Ein entscheidender Orientierungspunkt bei dieser Entwicklung war die Anlehnung an die ECMAScript-Sprache. Weitere Neuerungen waren die Unterstützung

93 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

von CSS (Cascading Stylesheet) und die Möglichkeit, mit vorbereiteten Komponenten neue Wege beim Datenaustausch mit externen und der Verarbeitung von internen Datenquellen zu beschreiten.

Objektorientierte Programmierung ActionScript 3.0

Seit Flash CS3 wurde die neueste Version von ActionScript 3.0, die nunmehr über eine sehr starke Ausrichtung auf die objektorientierte Programmierung und zusätzlich über verbesserte Scripting-, Compiler- und Debugger-Funktionen verfügt, eingeführt (siehe auch Kapitel 2). Die objektorientierte Programmierung (OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierschema. Die Grundidee ist dabei, dass Methoden und Funktionen, die auf die einzelnen Daten angewandt werden können, möglichst eng in einem so genannten Objekt zusammengefasst und nach außen abgedichtet werden, so dass Methoden fremder Objekte diese Daten nicht versehentlich manipulieren können. Im Gegensatz dazu beschreibt das vor der Einführung der OOP vorherrschende Muster eine strikte Trennung von Funktionen (Programmcode) und Daten, dafür aber eine schwächere Strukturierung der Daten selbst. In der objektorientierten Programmierung finden Sie Begriffe wie Klassen, Funktionen (Methoden) und Attribute, die direkt mit der Verwaltung und Beeinflussung von Objekten zu tun haben: Klassen sind Vorlagen, mit deren Hilfe Objekte zur Laufzeit als Instanzen (Stellvertreter mit eigenen Instanzennamen) erzeugt werden: // Eine Instanz des URLVariables-Objekts erstellen var variables:URLVariables = new URLVariables(); Listing 3.1 Eine Objekt-Instanz wird zur Laufzeit erzeugt.

Methoden (auch bezeichnet als Funktionen) sind die einer Klasse von Objekten zugeordneten Algorithmen. Spezielle Methoden zur Erzeugung bzw. Zerstörung von Objekten heißen beispielsweise Konstruktoren und Destruktoren: // Die Funktion completeHandler wird ausgeführt function completeHandler(event:Event):void{ // Formularfelder leer machen name_txt.text = ""; email_txt.text = ""; msg_txt.text = ""; // Rückgabe von der PHP-Datei anzeigen - return_msg status_txt.text = event.target.data.return_msg; status_txt.setTextFormat(erfolgText); } Listing 3.2 Eine Methode (Funktion) wird ausgeführt.

94 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.2 Datentypen

Attribute sind die verschiedenen Eigenschaften (Farbe, Größe, Ausrichtung, Position oder Sichtbarkeit) von Objekten. Die Eigenschaften eines Objekts nennt man Attribute. // Auslesen der Werte und Variablen für PHP vorbereiten variables.userName = name_txt.text; variables.userEmail = email_txt.text; variables.userMsg = msg_txt.text;

Mit Hilfe einer externen ActionScript-Datei und der neuen Dokumenten-Klasse können Sie jetzt beispielweise eine eigene Klasse angeben, die für die FlashDatei Gültigkeit hat und von dieser zur Laufzeit verarbeitet wird. In ActionScript 2.0 sah als Beispiel die Anweisung für die Funktionalität einer Schaltfläche noch folgendermaßen aus: mein_Buttton.onRelease = function(){ getURL("http://www.meinewebsite.com"); } Listing 3.3 Funktion in AS 2.0

In ActionScript 3.0 ist das etwas umfangreicher, aber wesentlich stärker auf das Muster (Paradigma) des objektorientierten Programmierens ausgerichtet: import flash.events.MouseEvent; mein_Button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); function mouseDownHandler(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.meinewebsite.com")); } Listing 3.4 Die gleiche Funktion in ActionScript 3.0 (OOP)

3.2 Datentypen Wie Sie in den nachfolgenden Erläuterungen zu den Grundlagen der Programmierung sehen werden, ist der Einsatz von Variablen eines der Basiselemente im Quellcode. Variablen werden deklariert oder vergeben. Die Zuordnung der Datentypen und deren Verarbeitung bestimmen die erfolgreiche Durchführung eines Projekts. In der objektorientierten Programmierung ist es von großer Bedeutung, dass diese Variablen der so genannten strikten Typisierung unterworfen werden. Jede Variable, die Sie deklarieren, gehört zu einem bestimmten Datentyp. Entweder handelt es sich um eine Variable, der ein Objekt zugeordnet ist, oder die Variable entspricht den folgenden in ActionScript 3.0 vorhandenen Datentypen:

95 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Datentyp »Boolean« Der Datentyp Boolean besteht aus zwei Werten: true und false, was so viel bedeutet wie: wahr oder falsch. Bei einer Abfrage, ob ein rotes Rechteck grün, rot oder blau ist, wird als Antwort (logischerweise) true übergeben. Für die Wertangabe des Variablentyps Boolean sind keine anderen Werte zulässig. Der Standardwert einer deklarierten, jedoch nicht definierten, Boolean-Variablen ist false.

Datentyp »Number« In ActionScript 3.0 kann der Datentyp Number Ganzzahlen, vorzeichenlose Ganzzahlen und Gleitkommazahlen darstellen. Um die Rechenkapazität des Programms nicht übermäßig zu belasten, sollten Sie den Datentyp Number nur für ganzzahlige Werte verwenden, die größer als die Speichergrenze für int- und uint-Typen mit 32 Bit oder für Gleitkommazahlen verwenden (-231 bis 231 - 1). Die Höchst- und Mindestwerte, die der Datentyp Number darstellen kann, sind in den statischen Eigenschaften der Number-Klasse namens Number.MAX_VALUE und Number.MIN_VALUE gespeichert. Number.MAX_VALUE == 1.79769313486231e+308 Number.MIN_VALUE == 4.940656458412467e-324 NaN (Not a Number)

Der Flash Player gibt den NaN-Wert nicht nur als Standardwert für die Variable des Typs Number, sondern auch als Ergebnis für jeden Vorgang, der eine Zahl liefern sollte, aber einen anderen Wert liefert. Wenn Sie beispielsweise versuchen, die Wurzel einer negativen Zahl zu berechnen, lautet das Ergebnis NaN. Weitere spezielle Number-Werte sind die positive Unendlichkeit (positive infinity) und die negative Unendlichkeit (negative infinity).

Datentyp »int« Der Datentyp int wird im Programm als Ganzzahl mit 32 Bit gespeichert und umfasst sämtliche Ganzzahlen im Bereich von -231 bis 231 - 1. In früheren Versionen von ActionScript konnte lediglich der Datentyp Number eingesetzt werden, der für Ganzzahlen als auch für Gleitkommazahlen verwendet wurde. In ActionScript 3.0 können Sie jetzt auch auf maschinennahe Typen für vorzeichenbehaftete und vorzeichenlose Ganzzahlen zugreifen. Wenn für eine Variable keine Gleitkommazahlen verwendet werden, wird der Code mit dem Datentyp int anstelle des Datentyps Number schneller und effizienter abgearbeitet.

Datentyp »uint« Der Datentyp uint wird als vorzeichenlose Ganzzahl angegeben und umfasst Ganzzahlen im Bereich von 0 bis einschließlich 232 - 1. Sie verwenden den Datentyp uint für Sonderfälle, die nicht-negative Ganzzahlen verlangen. 96 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.2 Datentypen

Beispielsweise sollten Sie den Datentyp uint zur Darstellung von Farbwerten für Pixel verwenden, da der Datentyp int ein internes Vorzeichen-Bit umfasst, das für die Verarbeitung von Farbwerten nicht geeignet ist. Für ganzzahlige Werte größer als der uint-Höchstwert verwenden Sie den Datentyp Number, der ganzzahlige Werte mit 53 Bit verarbeiten kann. Der Standardwert für Variablen des Datentyps uint lautet 0.

Datentyp »null« Der Datentyp null umfasst nur den Wert »Null«. Dies ist der Standardwert für den Datentyp String und alle Klassen, die komplexe Datentypen definieren. Hierzu gehört auch die object-Klasse. Keiner der anderen Grunddatentypen wie Boolean (true oder false), Number (Ganz- oder Dezimalzahlen), int (Ganzzahlen) und uint (vorzeichenlose Ganzzahlen) enthält den Wert null. Der Flash Player wandelt den Wert null in den entsprechenden Standardwert um, wenn Sie zum Beispiel versuchen, den Variablen des Typs Boolean, Number, int oder uint den Wert null zuzuweisen.

Datentyp »String« Der Datentyp String stellt eine Zeichenfolge von 16-Bit-Zeichen dar. Strings werden intern als Unicode-Zeichen im Format UTF-16 gespeichert. Strings sind unveränderliche Werte im Sinne eines Texteintrags. Eine Operation mit einem Stringwert liefert eine neue Instanz des Strings. Der Standardwert für eine Variable, die mit dem Datentyp String deklariert ist, lautet null. Der Wert null ist hier allerdings nicht das Gleiche wie eine leere Zeichenfolge (""), obwohl beide das Nichtvorhandensein von Zeichen darstellen.

UTF (Unicode Text Format), das universelle Encoding von Zeichensätzen

Datentyp »void« Der Datentyp void umfasst nur den Wert undefined. In früheren Versionen von ActionScript war undefined der Standardwert für Instanzen der Object-Klasse. In ActionScript 3.0 lautet der Standardwert für Object-Instanzen null. Wenn Sie versuchen, einer Instanz der Object-Klasse den Wert undefined zuzuweisen, wandelt Flash Player diesen Wert in null um. Der Wert undefined kann nur nicht typisierten Variablen zugewiesen werden. Nicht typisierte Variablen sind Variablen, denen entweder eine Typanmerkung fehlt oder die das SternchenSymbol (*) als Typanmerkung verwenden. Sie können void nur als RückgabeTypanmerkung verwenden.

Datentyp »Object« Der Datentyp Object wird von der Object-Klasse definiert. Die Object-Klasse dient als Basisklasse für alle Klassendefinitionen in ActionScript. Der Datentyp

97 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Object in ActionScript 3.0 unterscheidet sich vom Datentyp Object früherer

Versionen: • • •

Der Datentyp Object ist nicht mehr der Standarddatentyp, der Variablen ohne Typanmerkung zugewiesen wird. Der Datentyp Object erhält nicht mehr den Standardwert undefined, der früher für Object-Instanzen verwendet wurde. Der Standardwert für Instanzen der Object-Klasse in ActionScript 3.0 lautet jetzt null.

3.3 Programmelemente Variablen deklarieren Bei der Erstellung eines Programms müssen Sie sicher sein, dass die Daten, die während des Programmablaufs anfallen oder geändert werden, jederzeit eindeutig identifizierbar sein müssen. Um dies zu realisieren, bedienen wir uns der Variablen. Eine Variable definiert quasi eine Art Container, in dem Daten verwaltet und bereitgehalten werden. Das folgende ActionScript-Beispiel zeigt Ihnen, wie Variablen mit strikter Datentypisierung in Flash aussehen: var name_txt:String = "Heinz Mustermann"; var myNum:Number = 30; var myObj:Object = new Object;

Der oberste Container beinhaltet die Variable name_txt mit dem Wert "Heinz Mustermann". Die Anwendung von :String in der vorangegangenen Codezeile verweist auf den Datentyp, durch den der Wert der Variablen definiert ist. Diese Zuweisung nennt man Datentypisierung oder auch Strikte Typisierung.

Achtung

Bitte beachten Sie bei der Vergabe von Variablennamen: • • • • •

Variablennamen dürfen keine Leerzeichen enthalten. Variablennnamen dürfen keine Umlaute wie ä, ö, ü und kein ß enthalten. Variablennamen benötigen kein Zeichen davor (wie z.B. in PHP das $-Zeichen). Variablennamen unterscheiden zwischen Groß- und Kleinschreibung. Die Groß- und Kleinbuchstaben dürfen gemischt werden (mit Vorsicht!). Variablennamen dürfen nicht mit Anweisungen, Befehlen oder Operatoren aus der jeweiligen Programmiersprache übereinstimmen. Der Compiler gibt eine Fehlermeldung aus, sollte dies der Fall sein: var int:Number = 23 + 15; trace(int);

98 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Compiler-Fehler: 1046: Typ wurde nicht gefunden oder war keine Kompilierungszeit-Konstante: int.

Gewöhnen Sie sich am besten an, klare Variablennamen mit verständlichem Inhalt zu vergeben, dies ist für Ihre Arbeit und die Ihrer Teamkollegen sicher immer von Vorteil.

Ein praktisches Beispiel Hier folgt ein Codeschnipsel aus einem Flash-Formular, dessen Aufbau und Funktionalität ich in Kapitel 4 Schritt für Schritt zu ActionScript 3.0 noch genauer durchleuchte.

Beispiel

Durch die Vergabe des Variablennamens name_txt geben Sie dem Container (in unserem Fall einem Texteingabefeld) einen Namen, der im gesamten weiteren Ablauf beibehalten wird. Der Inhalt des Containers, also sein Wert, kann jederzeit geändert werden. // Überprüfen der Formularfeldeingabe und Absenden über den Submit// Button function CheckAndSend(event:MouseEvent):void{ //Formularfelder richtig ausgefüllt? if(!name_txt.length) { status_txt.text = "Bitte geben Sie einen Namen ein."; }... Listing 3.5 Die Abfrage einer erfolgten Benutzereingabe in einem Flash-Formular

Wenn das Formularfeld mit dem Variablennamen name_txt nicht ausgefüllt wurde, wird in das Textfeld mit dem Variablennamen status_txt die Ausgabe von: »Bitte geben Sie einen Namen ein.« erfolgen (siehe Abbildung 3.1). Abbildung 3.1 Das Formular mit dem Eingabefeld name_txt wurde ohne Eintrag abgesendet.

Typische Arten von Informationen, die in einer Variablen gespeichert werden können, sind zum Beispiel: • • • •

Domainnamen (Typ: String) Benutzernamen (Typ: String) Anzahl bereits durchlaufener Ereignisse (Typ: Number, int oder uint) Abfrage eines Mausklicks oder eines Tastaturereignisses (Typ: Boolean)

Jede SWF-Datei beinhaltet eine ganze Anzahl von Variablen. Dies gilt ebenso für Objektinstanzen von MovieClips. Um den Wert einer Variablen zur Laufzeit zu kontrollieren, benutzen Sie den Befehl trace(). Die Anzeige dieses Befehls erfolgt im bereits genannten Bedienfeld AUSGABE.

99 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Die Erweiterung unseres Beispiels könnte folgendermaßen aussehen: trace("Der eingegebene Name ist: " +name_txt.text);

Die möglichen Ergebnisse im Ausgabefenster sehen Sie in Abbildung 3.2. Abbildung 3.2 Der Benutzer hat das Formular ohne die Angabe des Namens abgesendet: Das Ausgabefenster zeigt keinen Namen an. Der Wert der Variablen name_txt wird leer übergeben. Abbildung 3.3 Der Benutzer hat das Formular mit Angabe seines Namens abgesendet: Das Ausgabefenster zeigt den Namen an. Der Wert der Variablen name_txt wird gefüllt übergeben.

Vergabe von Instanznamen als Variablen Neben der bereits aufgeführten Möglichkeit, Variablen per ActionScript zu deklarieren, gibt es in Flash CS4 Professional noch eine weitere Möglichkeit, Variablen zu vergeben: Wenn Sie ein MovieClip-Symbol, ein Schaltflächen-Symbol oder ein Textfeld auf der Bühne platzieren, können Sie ihm einen so genannten Instanznamen zuweisen. Wählen Sie das entsprechende Symbol oder das Textfeld aus, öffnen Sie danach das Bedienfeld EIGENSCHAFTEN und tragen Sie den Instanznamen ein. Abbildung 3.4 Tragen Sie im Bedienfeld EIGENSCHAFTEN den Instanznamen ein.

Im Hintergrund erzeugt Flash eine Variable mit dem gleichen Namen, den Sie der Instanz bzw. dem Textfeld gegeben haben. Von diesem Moment an können Sie per ActionScript auf das Objekt über seinen Variablennamen zugreifen. Sobald Sie also in Ihrem Code den Variablennamen name_txt einsetzen, wird dieser Aufruf direkt das entsprechende Objekt beeinflussen. 100 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Zuweisung von Datentypen und Strikte Typisierung Wenn Sie in Ihrem Programm-Code eine Variable deklariert haben, sollten Sie dieser Variablen immer einen entsprechenden Datentyp zuweisen. Es sei denn, Sie wollen ausdrücklich darauf verzichten. Ein Grund dafür kann sein, dass eine Typisierung erst zur Laufzeit erfolgen soll oder Sie die Entscheidung über die Typisierung einem Teamkollegen überlassen wollen. Geben Sie dies notfalls explizit an, damit es nicht zu lästigen Fehlermeldungen kommt. Nutzen Sie das Sternchen-Symbol (*), um die absichtliche Nicht-Typisierung anzuzeigen: var meineVariable:*;

Sehen Sie nachstehende Beispiele für deklarierte Variablen mit zugewiesenen Daten, also mit strikter Typisierung: var myText:String = "Bitte vergessen Sie nicht zu speichern!"; var myInteger:int = -100; //Die Anführungsstriche werden weggelassen var myNumber:Number = 375; var myBoolean:Boolean = true; var myRocket:Object = new Object();

Typumwandlung Eine Typumwandlung tritt auf, wenn ein Wert in den Wert eines anderen Datentyps umgewandelt wird. Um einen vorhandenen Datentyp in einen anderen Typ umzuwandeln, schließen Sie den Objektnamen in runde Klammern ein und stellen ihm den Namen des neuen Typs voran. Im folgenden Codebeispiel wird ein boolescher Wert in eine Ganzzahl umgewandelt: var myBoolean:Boolean = true; var myINTEGER:int = int(myBoolean); trace("myBoolean ist: " + myINTEGER); // myBoolean ist: 1

Globale und lokale Variablen Der Gültigkeitsbereich von Variablen wird über das Deklarieren von globalen und lokalen Variablen definiert. Um zum Beispiel den Punktestand des Spielers in einem Game von Szene zu Szene weiterzugeben, muss die entsprechende Variable zu jeder Zeit mit ihrem aktuellen Stand verfügbar sein. Diese Variable wird als globale Variable bezeichnet. Eine globale Variable ist demzufolge über alle Bereiche Ihres Codes definiert. Eine globale Variable definieren Sie, indem Sie sie außerhalb einer Funktionsoder Klassendefinition definieren. Im folgenden Code wird beispielsweise eine globale Variable strGlobal abgerufen, die außerhalb einer Funktion deklariert wird. Das Codebeispiel zeigt, dass eine globale Variable sowohl innerhalb als auch außerhalb der Funktionsdefinition verfügbar ist. var strGlobal:String = "Globale Variable"; function globalTest() {

101 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

trace(strGlobal); //Globale Variable } globalTest(); trace("auch außerhalb? " +strGlobal); //auch außerhalb? //Globale Variable

Hinweis

Beachten Sie im Laufe Ihrer Programmierung den Unterschied zwischen globalen und lokalen Variablen. Sollte es einmal zu einer Überschneidung kommen, gilt in Flash: lokal geht vor global! Eine lokale Variable hat nur Gültigkeit innerhalb einer in sich geschlossenen Funktion. Mit dem Ende der Funktion verliert diese Variable ihre Gültigkeit. function localTest() { var strLokal:String = "Lokale Variable"; } localTest(); trace("lokal außerhalb? " +strLokal);

Ausgabe: Fehler 1120:Zugriff auf eine nicht definierte Eigenschaft strLokal. Wie Sie sehen, ist die lokale Variable strLokal wie vorausgesagt lediglich innerhalb der Funktion gültig.

Kommentare Wenn Sie beim Schreiben eines umfangreichen Programms sind, kann es ungemein nützlich sein, an relevanten Stellen kurze Kommentare anzubringen, die in mehrfacher Hinsicht hilfreich sein können: 1. 2. 3. 4.

Sie sind leicht auffindbar. Sie beinhalten Kommentierungen oder Hinweise über den Quellcode. Sie lassen einen Einblick in Ihre Gedanken auch noch nach Monaten zu. Sie dienen zur besseren Kommunikation mit Ihren Teamkollegen.

Einzeilige Kommentare Ein einzeiliger Kommentar wird in Flash immer mit einem Doppel-Slash // eingeführt. Der Flash Player erkennt an diesen Strichen, dass es sich um einen Kommentar handelt, führt also den dort stehenden Inhalt nicht aus: // Überprüfen der Eingabe und Absenden über den Submit-Button function CheckAndSend(event:MouseEvent):void{...

Einzeilige Kommentare benutzen die Programmierer oft auch am Ende einer Codezeile, um dort noch einen kurzen Kommentar anzubringen:

102 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Abbildung 3.5 Kurzer Kommentar am Ende der Zeile

Mehrzeilige Kommentare Mehrzeilige Kommentare gehen, wie der Name bereits sagt, über mehrere Zeilen hinweg und beinhalten oft umfangreichere Ausführungen zum Code während der Programmierung. Besonders in der Lernphase sollten Sie auf dieses altbewährte Mittel zurückgreifen und alles möglichst als Kommentar notieren, was Ihnen wichtig ist. Der mehrzeilige Kommentar wird immer mit einem Slash und einem Sternchen begonnen /* und so beendet */: /* ein mehrzeiliger Kommentar kann hilfreich sein, wenn Sie beispielsweise einem Kollegen oder Mitarbeiter einen gründlicheren Einblick in das Geschehen in Ihrem Quellcode geben wollen */

Ein weiterer wichtiger Aspekt bei der Programmierung ist das Aufbewahren von derzeit nicht benötigtem Code, den Sie aus irgendeinem Grund nicht löschen, sondern bewahren möchten. Nutzen Sie auch hier die Möglichkeit, einen einzeiligen oder mehrzeiligen Kommentar zu erzeugen, indem Sie die entsprechenden Zeilen einfach »auskommentieren« (siehe Abbildung 3.6). Abbildung 3.6 Nutzen Sie die Möglichkeit, nicht benötigten Code auszukommentieren.

In der Abbildung sehen Sie die Kombination von mehrzeiligem Kommentar (auskommentierter Codebereich von /* bis */) und einzeiligem Kommentar. Auch die einzeiligen Kommentare lassen sich in dem auskommentierten Codeblock aufbewahren.

Operatoren Operatoren sind spezielle Funktionen in der Programmierung, die mindestens einen Operanden umfassen und in jedem Falle einen Wert zurückgeben. Ein

103 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Operand ist ein Wert (in der Regel ein Literal, eine Variable oder ein Ausdruck), den ein Operator als Eingabe verwendet. Am leichtesten zu verstehen sind für uns die binären Operatoren, da wir sie aus dem täglichen Leben kennen, wie zum Beispiel den Divisions-Operator /, der aus zwei Operanden (daher der Begriff binär) besteht: var myDiv:Number = 3/6; //3 ist Operand 1 und 6 ist Operand 2 trace(myDiv); //0.5

Nachfolgend sehen Sie die wichtigsten Gruppen von Operatoren innerhalb von ActionScript in einer Tabelle: Tabelle 3.1 Die Auflistung der wichtigsten Operatoren im Überblick

Gruppe

Operatoren

Primäre Operatoren

[ ] {x:y} () f(x) new x.y x[y] @ :: ..

Suffix

x++ und x--

Multiplikative Operatoren

* / %

Additive Operatoren

+ oder -

Gleichheitsoperatoren

== != === !== < instanceof is

Logische Operatoren

&& ||

Zuweisungsoperatoren

=

Bitweise Operatoren

& >

XML-Operatoren

@ [] {} + += delete .. . ()

*=

/=

+=

>

= in

-=

Primäre Operatoren [ ] {x:y} () f(x) new x.y x[y] @ :: .. Abbildung 3.7 Primäre Operatoren im Einsatz: (), new und []

104 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Innerhalb der ActionScript-Programmierung spielen diese Operatoren eine primäre, also eine herausragende Rolle, da sie die Operatoren zum Erstellen von Array- und Object-Literalen, zum Gruppieren von Ausdrücken, zum Aufrufen von Funktionen, zum Instanzieren von Klasseninstanzen und zum Zugreifen auf Eigenschaften von XML-Dateien bereitstellen. Abbildung 3.7 soll Ihnen die Funktionsweise und den Einsatz dieser Gruppe von Operatoren verdeutlichen:

Suffix x++ und x--

Diese Operatoren nennt man auch unäre Operatoren, da sie im Gegensatz zu den binären Operatoren nur einen Operanden umfassen. Die Schleife in Abbildung 3.8 zeigt Ihnen das Suffix i++ in der Anwendung (i ist eine ganzzahlige Variable, die Sie sehr oft in Schleifen finden): Abbildung 3.8 In der for-Schleife wird das Suffix angewendet.

Den x++-Operator nennt man Inkrement-Operator, da er den Ausgangswert um eins hochzählt. Den x---Operator nennt man Dekrement-Operator, da durch ihn der Ausgangswert um eins erniedrigt wird.

Multiplikative Operatoren * / %

Multiplikative Operatoren nehmen über den Zugriff auf mindestens zwei Operanden Multiplikationen, Divisionen und Restwertberechnungen vor: var mySum:Number = 13 * 15; // Ausgabe 205 (Multiplikation) var mySum:Number = 12 / 6; // Ausgabe 2 (Division) var mySum:Number = 13 / 5 % 2; // Restwert aus (13/5 – 2) Ausgabe // 0.60000001 var mySum:int = 13 / 5 % 2; // Restwert Ausgabe 0 (int nur Ganzzahlen)

Sie sehen in der vierten Beispielzeile, dass ich den Datentyp für die gleiche Restwertberechnung wie in Zeile 3 von Number auf int geändert habe. Die Ausgabe ist 0, da int lediglich Ganzzahlen verarbeiten kann.

Additive Operatoren + und –

Additive Operatoren bilden Summen mit Hilfe der Addition oder führen Subtraktionen durch, indem sie eine Menge von der anderen abziehen:

105 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

var myAdd:Number = 23 +23; //Ausgabe 46; var myAdd2:Number = 13.5 + 14.5 + 7; // Ausgabe 35 var mySub:Number = 47.3 - 28.4; //Ausgabe 18.9

Hinweis

Sie können die einzelnen Operanden in Ihrer Programmierung auch jeweils als eine Variable deklarieren und danach die Summe aus den Variablen berechnen lassen. Schauen Sie sich bitte das nachstehende Beispiel an: var anzahl1:Number = 15; var anzahl2:Number = 30; var anzahl3 = anzahl1 + anzahl2; trace(anzahl3); //Ausgabe 45 Listing 3.6 Summe bilden aus Werten von Variablen

Vergleichende Operatoren Die vergleichenden oder auch relationalen Operatoren umfassen zwei Operanden, vergleichen deren Werte und geben einen booleschen Wert zurück. Alle relationalen Operatoren haben dieselbe Rangfolge. Tabelle 3.2 Die relationalen Operatoren vergleichen Werte.

Operator

Erläuterung

==

Überprüft die Gleichheit zweier Ausdrücke oder Werte (eqality)

!=

Prüft auf das genaue Gegenteil von == (ineqality)

===

Prüft die strikte Gleichheit zweier Ausdrücke (ohne automatische Datenkonvertierung)

!==

Prüft die strikte Ungleichheit zweier Ausdrücke




Größer als

=

Größer als oder gleich

is

Überprüft den Datentyp

in

Überprüft die Objekteigenschaften

instanceof

Überprüft die Prototypkette

Ein typisches Beispiel für einen vergleichenden Operator ist in der folgenden ifAbfrage zu finden:

Beispiel

var anzahl1:Number = 15; var anzahl2:Number = 30; if (anzahl1 > anzahl2) { trace("Zahl 1 ist größer als Zahl 2");

106 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

} else { trace("Zahl 1 ist kleiner als Zahl 2"); }

Logische Operatoren Logische Operatoren werden im Zusammenhang mit booleschen Werten (true oder false) angewendet. Die Frage lautet: Ist etwas wahr oder falsch? Das heißt, dass zum Beispiel das logische AND zwei zusammenhängende Werte auf true oder false überprüft und als Ergebnis wiederum true oder false ausgibt. Ein Beispiel soll dies verdeutlichen: Ein Spieler versucht, in einem Spiel mit möglichst wenigen Versuchen einen hohen Punktestand zu erreichen und das Spiel dadurch zu gewinnen. Zwei Parameter, nämlich versuche und punktestand werden nach jedem Versuch aktualisiert, so dass Sie per ActionScript kontrollieren können, ob eine bestimmte Anzahl Versuche nicht überschritten wurde und trotzdem die geforderte Punktezahl erreicht wurde. Wenn der Spieler nach drei oder weniger Versuchen 100 Punkte erreicht hat, erscheint »So sehen Sieger aus!« im Bedienfeld AUSGABE.

Beispiel

Logisches AND && im Code: var versuche:Number = 2; // Unter drei Versuchen geblieben? = true var punktestand:Number = 105; // Mehr als 100 Punkte = true if ((versuche = 100)) { trace("So sehen Sieger aus!"); } else { trace("Versuch’s nochmal!"); }

Das nächste Beispiel überprüft drei Bedingungen: Ist »a« größer als 10? Antwort: nein (false). Oder ist »b« größer als 250? Antwort: ja (true). Oder ist start = true? Antwort: nein (false).

Logisches OR || im Code: var a:Number = 10; var b:Number = 250; var start:Boolean = false; if ((a > 25) || (b > 200) || (start)) { trace("Der Test für das logische OR ist erfolgreich verlaufen"); }

Es wird die Ausgabe »Der Test für das logische OR ist erfolgreich verlaufen« angezeigt, da eine der Bedingungen in der if-Anweisung »wahr« (b > 200) ist. 107 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Zuweisungsoperator und zusammengesetzte arithmetische Zuweisungen =

und

*=

/=

+=

-=

Der gebräuchlichste Zuweisungsoperator ist das Gleichheitszeichen =. Die Zuweisung kann entweder durch einen Wert oder durch eine Referenz erfolgen. Bei einer Zuweisung durch einen Wert wird der tatsächliche Wert von ausdruck2 kopiert und in ausdruck1 gespeichert. Die Zuweisung durch einen Wert wird dann verwendet, wenn es sich bei ausdruck2 um einen Grundwert handelt. Dies bedeutet, dass der Datentyp entweder Boolean, Number, int, uint oder String sein muss.

Beispiel

var ausdruck2 = 20; var ausdruck1:Number = ausdruck2; //Zuweisung des Wertes von //ausdruck2 trace(ausdruck1); //Ausgabe: 20;

Bei den zusammengesetzten arithmetischen Zuweisungen handelt es sich um arithmetische Operatoren mit einer verkürzten Schreibweise. So sieht die »lange« Schreibweise einer Addition zweier Werte aus: var x = 2; var y = 4; x = x + y; trace(x); //Ausgabe 6

Und so sieht die »verkürzte« Schreibweise derselben Addition aus: var x = 2; var y = 4; x += y; trace(x); //Ausgabe 6

Bitweise Operatoren & >

Die bitweisen Operatoren greifen auf die so genannten Binärzahlen zu. Sie müssen dazu wissen, dass jede Zahl gleichzeitig einem Binärwert entspricht, sich also aus 1 und 0 zusammensetzt. So entspricht beispielsweise die Dezimalzahl 15 der Binärzahl 1111 und die Dezimalzahl 9 entspricht der Binärzahl 1001. Mit Hilfe der bitweisen Operatoren können Sie nun beispielsweise beeinflussen, dass die Binärzahlen bitweise verschoben werden und sich dadurch eine Veränderung der Dezimalzahl ergibt.

108 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Im folgenden Beispiel wird die Ganzzahl 7 um 8 Bit nach links verschoben:

Beispiel

x = 7 (grö-

113 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

ßer als) und < (kleiner als) finden Sie zusätzlich den logischen Vergleichsoperator || ODER. var a:int = 20; var b:int = 30; if (a > b) { trace ("a ist größer als b"); } if (a < b || a == b) { trace ("a ist kleiner oder gleich b"); } Abbildung 3.14 Das Codebeispiel mit AUSGABE-Bedienfeld

Die if..else if-Bedingung Mit der if..else if-Abfrage können Sie mehr als eine Bedingung testen und dabei die else-Anweisung sinnvoll einsetzen. Das folgende Beispiel fragt in der angegebenen Variablen nicht nur die erste Bedingung > 3 ab, sondern prüft auch noch zusätzlich, ob der Wert der Variablen negativ ist. var myWert:int = 3; if (myWert >= 3) { trace("myWert ist > oder gleich 3"); } else if (myWert < 0) { trace("myWert ist negativ"); }

114 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Falls nach einer if- oder else-Abfrage nur eine einzige Ausgabe oder nur ein einzelner Funktionsaufruf folgt, benötigen Sie keine geschweiften Klammern {} (brackets). Das folgende Beispiel zeigt Ihnen die entsprechende Syntax: var myWert:int = -5; if (x > 0) trace("x is positive"); else if (x < 0) trace("x is negative"); else trace("x is 0"); Listing 3.8 Die if..else if-Abfrage

Sie sollten auf das Weglassen der geschweiften Klammern jedoch eigentlich nie verzichten, da es sein kann, dass Sie später ein weiteres Verhalten hinzufügen und die fehlenden Klammern dann zu einem fehlerhaften Ablauf führen. Diesen Vorgang verdeutlicht das Codebeispiel in Abbildung 3.15. Der Wert der Variablen myPosWert wird um 1 erhöht, obwohl die Bedingung, dass der Wert der Variablen myNumber > 0 ist, nicht erfüllt ist: Abbildung 3.15 Die Variable i wird um 1 erhöht, obwohl die Bedingung nicht erfüllt ist (»myNumber ist positiv«).

Sie sehen in Abbildung 3.16 den gleichen Ablauf mit geschweiften Klammern und der else-Abfrage.

115 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Abbildung 3.16 Mit den geschweiften Klammern erfolgt kein Hochzählen von i (AUSGABE 0).

Die switch-Bedingung Oft ist es im Laufe eines Programms notwendig, mehrfach und aufeinanderfolgend Bedingungen zu prüfen, deren einzelne Abfolge mit einem recht großen Programmieraufwand verbunden wäre. Daher hat man bei der Entwicklung der Programmiersprachen eine Möglichkeit gefunden, die diese Abfragen wesentlich verkürzt. Man nennt diesen Vorgang switch-Bedingung. Dabei geht es um die mehrfache Prüfung des Wertes einer Variablen. Je nachdem, welcher Wert dann mit der Bedingung übereinstimmt, wird der entsprechende Code- oder Programmblock an dieser Stelle ausgeführt:

Die Syntax im Überblick switch (Variable) { case ausdruck1 oder wert1: // Ausführung von Codeblock 1 break; case ausdruck2 oder wert2: // Ausführung von Codeblock 2 break; case ausdruck3 oder wert3: // Ausführung von Codeblock 3 break; : :

116 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

case ausdruckn oder wertn: // Ausführung von Codeblock n break;

Die Abfolge der switch-Bedingung wird durch die case-Anweisung bestimmt. Schritt für Schritt wird case abgearbeitet und es wird nach einer Übereinstimmung mit dem Variablenwert oder -ausdruck gesucht. Sollte ein case die erfolgreiche Übereinstimmung mit der Variablen melden, wird der entsprechende Codeblock ausgeführt. Die Anweisung break bestimmt, dass nach erfolgreicher Rückmeldung der Übereinstimmung keine weitere Abfrage der Bedingungen erfolgt. Das erspart ActionScript Zeit für den weiteren Programmablauf. Auch hier soll Ihnen ein Beispiel wieder den Einsatz in der praktischen Anwendung zeigen. Nehmen wir an, Sie wollen einem Sportler ein Feedback für das Erreichen einer bestimmten Laufzeit über 100 Meter geben.

Beispiel

Wir gehen einmal davon aus, dass der Weltrekord bei 9,58 Sekunden auf 100 Meter (gelaufen von Usain Bolt aus Jamaika) liegt. Sollte also jemand als ungeübter Läufer 12 Sekunden schaffen, wäre das sehr gut. 14 Sekunden auf 100 Meter wären ziemlich gut und 20 Sekunden befriedigend. Schlecht wäre eine Laufzeit über 25 Sekunden. Hiermit haben wir also unsere Bedingungen aufgestellt, die wir mit Hilfe der switch-Bedingung abfragen wollen. var myLaufzeit = 14; switch(myLaufzeit) { case 12: trace("Sie sind fast olympiaverdächtig!") break; case 14: trace("Eine gute Leistung, trainieren Sie weiter!") break; case 20: trace("Wenn Sie 10 Kilo abnehmen, klappt es vielleicht!") break; case 25: trace("Nehmen Sie es nicht so schwer, aber Ihr Lauf ist stark verbesserungswürdig!") break; default: trace("Heute ist wohl gar nicht Ihr Tag?"); //Ausgabe Eine gute Leistung, trainieren Sie weiter! Listing 3.9 Die switch-Bedingung im Beispiel

Ein weiteres gängiges Beispiel ist die Abfrage von Schulnoten und deren Bewertung: var myNote:int = 2; switch(myNote) { case 1: trace("Sehr gute Note, dahinter steckt ein kluger Kopf!") break; case 2: trace("Das ist ein gutes Ergebnis!") break; case 3: trace("Immerhin befriedigend!")

117 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

break; case 4: trace("Da haben wir aber schon Besseres gesehen!") break; case 5: trace("Jetzt heißt es, aufpassen!") break; case 6: trace("Selbst ein blindes Huhn wäre besser!") break; } //Ausgabe Das ist ein gutes Ergebnis! Listing 3.10 Abfragen von Schulnoten mit der switch-Bedingung

Schleifen Abläufe, die mehrmals hintereinander folgen sollen, oder Befehlsketten, die in einer bestimmten Abfolge von Durchläufen abgearbeitet werden sollen, werden durch so genannte Schleifen initiiert. Die Anzahl der Schleifen können Sie fest vorgeben oder Sie können diese Anzahl auch an eine sich ändernde Variable binden, so dass die Anzahl der Durchläufe je nach Variablenwert ebenfalls variabel ist.

Die for-Schleife Die for-Schleife wird stets in geschweifte Klammern gefasst. Sie wird bestimmt durch eine feste und vorgegebene Anzahl von Durchläufen. Für diese Schleife benötigen Sie mindestens drei Werte, die bestimmt werden müssen: 1. Eine Variable, der ein Anfangswert zugewiesen (initial value) und deren Wert bei jedem Durchlauf verändert (erhöht oder erniedrigt) wird 2. Eine Abbruch-Bedingung, die bestimmt, wann die Schleife endet 3. Ein Inkrement- oder Dekrement-Suffix, das den Wert der Variablen bei jedem Durchlauf jeweils erhöht (++) oder erniedrigt (--)

Die Variable mit dem Anfangswert (initial value) Die for-Schleife beginnt, wie der Name bereits sagt, immer mit dem Begriff for. Danach folgt die Variable mit der Typisierung und der Wertzuweisung: for (var i:int = 0;...) Die Variable i bekommt den Startwert 0 zugewie-

sen. for (var j:int = 17;...) Die Variable j bekommt den Startwert 17 zugewie-

sen. for (var k:int = -5;...) Die Variable k bekommt den Startwert -5 zugewie-

sen.

Hinweis

Sehr oft werden Sie sehen, dass in den for-Schleifen die Variable mit dem Anfangswert den Variablennamen i trägt. Vermutlich stammt diese eingebürgerte Namensgebung von dem Ganzzahlenformat Integer. Sie sollten sich der Einfachheit halber diese Vorgehensweise einprägen und in Ihren Projekten einsetzen.

118 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Die Abbruchbedingung Die Abbruchbedingungen beinhalten in den meisten Fällen die vergleichenden Operatoren wie < , > , =. Dabei wird der Anfangswert mit dem Bedingungswert verglichen und der nächste Durchlauf organisiert oder es wird abgebrochen, wenn die Abbruchbedingung erfüllt ist: for (var i:int = 0; i < 3;...) Die Abbruchbedingung ist nicht erfüllt, solange der Wert von i immer noch kleiner als 3 ist. for (var j:int = 14; j > 6;...) Die Abbruchbedingung ist nicht erfüllt, solange der Wert von j noch größer als 6 ist. for (var k:int = -5; k < 0;...) Die Abbruchbedingung ist nicht erfüllt, solange der Wert von k noch kleiner als 0 ist (also negativ!).

Das Inkrement- oder Dekrement-Suffix Um die Schleife zu durchlaufen, benötigen wir einen Zählmechanismus, der die Erhöhung oder Erniedrigung der Ausgangswert-Variablen durchführt. Man bedient sich hier der Suffixe Inkrement ++ oder Dekrement --. Das bedeutet, dass der ursprüngliche Wert pro Durchlauf der Schleife um eins erhöht wird. Was müssen wir tun, um den Wert um mehr als eins zu erhöhen oder zu erniedrigen? Ganz einfach, wir nutzen die zusammengesetzte arithmetische Zuweisung (siehe Operatoren) += oder -= und weisen den Wert zu.

Inkrement-Suffix for (var i:int = 0; i < 3; i++) //Hochzählen um 1 pro Durchlauf Listing 3.11 Das Inkrement-Suffix for (var i:int = 0; i < 3; i += 3 ) //Hochzählen um 3 pro Durchlauf Listing 3.12 Arithmetische Zuweisung i += 3 Abbildung 3.17 Das Suffix erhöht den Variablenwert bei jedem Durchlauf um 1 bis zum Abbruch bei 2.

119 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Abbildung 3.18 Der Wert von i wird bei jedem Durchlauf um 3 erhöht. Die 27 wird nicht erreicht, da die Schleife durchlaufen wird, solange i kleiner als 27 ist.

Dekrement-Suffix Das Dekrement-Suffix ist die Umkehrung des Inkrements. Bei jedem Durchlauf wird hier der Wert der Variablen um eins erniedrigt. for (var i:int = 14; i > 6; i--) //Runterzählen um 1 pro Durchlauf Listing 3.13 Das Dekrement-Suffix for (var i:int = 100; i >= 5; i -= 5) //Runterzählen um 5 pro Durchlauf Listing 3.14 Arithmetische Zuweisung i -= 5 Abbildung 3.19 Der Wert von j wird bei jedem Durchlauf um 1 erniedrigt. Solange j > 6 ist, danach Abbruch.

Zusammenfassend können wir sagen, dass die Schleifen eine gute Möglichkeit darstellen, Durchläufe aller Art zu organisieren. Ob Sie mit Hilfe einer Schleife 120 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

ein Objekt über die Bühne bewegen wollen, ob Sie die Länge eines Arrays (siehe Abschnitt »Arrays« auf Seite 125) bestimmen wollen oder ob Sie die Schleife zum Auslesen der Knoten einer XML-Datei einsetzen wollen. In jedem dieser Fälle ist der Einsatz der Schleife nützlich und hilfreich. Die beste Nachricht ist aber dabei, dass diese Technologie sprachenübergreifend Gültigkeit hat, so dass Sie Ihr Wissen ebenso in der PHP-Programmierung als auch in der JavaScript-Programmierung zur Anwendung bringen können. Einen Vergleich der Syntax innerhalb von PHP, JavaScript und ActionScript finden Sie im Abschnitt »Arrays« auf Seite 125.

Die for..in-Schleife Mit der for..in-Schleife können Sie die Eigenschaften eines Objekts oder die Elemente eines Arrays durchlaufen. Das x im nachfolgenden Codebeispiel bedeutet die horizontale Position des Objekts auf der Bühne, das y die vertikale Position. Es handelt sich also um festgelegte Attribute, die die Position des Objekts bestimmen: var myObj:Object = { x:20, y:30 }; for (var i:String in myObj) { trace(i + ": " + myObj[i]); } //Ausgabe //x: 20 //y = 30 Listing 3.15 Die for..in-Schleife durchläuft die Eigenschaften eines Objekts.

Die vorliegende Schreibweise ist die »verkürzte« Schreibweise. Sie bekommen mit der for..in-Schleife die gleichen Ergebnisse bei der »langen« Schreibweise des Codes, wie Sie in Abbildung 3.24 sehen. Abbildung 3.20 Die Objekteigenschaften in der ursprünglichen Schreibweise mit zwei Zeilen mehr Code

121 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Erweitern wir das Beispiel aus Listing 3.15 um ein weiteres Attribut bzw. eine weitere Eigenschaft für unser Objekt myObj, ergibt sich das, was Sie in Abbildung 3.25 sehen. Abbildung 3.21 Das Auslesen der Variablen myColor ist problemlos gelaufen.

Wie Sie an diesem Beispiel sehen, stimmt die Ausgabe der Eigenschaften nicht mit der Reihenfolge aus der Objekt-Wertzuweisung überein. Bei jedem »Filmtesten« bekommen Sie womöglich ein anderes Ergebnis. Das hat damit zu tun, dass die Eigenschaften in einem eher zufälligen Ablauf ausgelesen und ausgegeben werden. Weiterhin sehen Sie am Beispiel, dass die Attribute x und y, die als Objekteigenschaften von ActionScript festgelegt sind und die Variable myColor, die wir hinzugefügt haben, gleichermaßen akzeptiert und ausgelesen werden. Schauen wir uns noch kurz die Iteration über ein Array an: var myArray:Array = ["Hans Mustermann", "Heinz Becker", "Karl Sauber"]; for (var i:String in myArray) { trace(myArray[i]); } // // // //

Ausgabe Hans Mustermann Heinz Becker Karl Sauber

Listing 3.16 Die for..in-Schleife gibt die Items des Arrays aus.

Achtung

Beachten Sie hier, dass die Variable i:String innerhalb der for-Schleife definiert wird, also ähnlich wie bei der »normalen« for-Schleife eine initialisierende Variable darstellt. Mit dem Unterschied, dass hier kein Anfangswert vergeben wird, sondern eine Zuweisung erfolgt, was gesucht werden soll.

122 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Die for..each..in-Schleife Die for..each..in-Schleife macht auf den ersten Blick nichts anderes als die for..in-Schleife. Mit einem Unterschied, der von Bedeutung ist: Wie die for..in-Schleife durchläuft die for..each..in-Schleife ebenfalls die Eigenschaften eines Objekts, die Elemente eines Arrays oder die Elemente eines XMLbzw. eines XMLList-Objekts. Es wird jedoch nicht der Name und der Wert der Eigenschaft, sondern lediglich der Wert dieser Eigenschaft ausgelesen und wiedergegeben: var myObj:Object = { x:40, y: -50}; for each (var num in myObj) { trace(num); } //Ausgabe //40 //-50 Listing 3.17 Die Iteration über die Eigenschaften x und y eines Objekts

Einen adäquaten Vorgang können wir mit der Iteration über ein XML-Objekt ebenfalls erfolgreich durchführen. Alle Items (Bestandteile) des XML-Objekts werden mit dem Code ausgelesen, den Sie in Abbildung 3.26 sehen. Abbildung 3.22 Die for..each..inSchleife zum Auslesen der Items in einem XML-Objekt

Wie ich bereits erwähnt habe, wird uns das Thema XML im Laufe der weiteren Erörterungen noch mehrfach beschäftigen. Daher ist es noch nicht notwendig, an dieser Stelle näher auf XML und seine Struktur einzugehen.

123 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Die while-Schleife Die while-Schleife ähnelt einer for-Schleife mit der if-Abfrage, da sie wiederholt wird, solange die Bedingung true ist. Das Codebeispiel erzeugt die gleiche Ausgabe wie nachfolgende for-Schleife: var i:int = 0; while (i < 5) { trace(i); i++; } var i:int = 0; for (i = 0; i < 5; i++) { trace(i); } Listing 3.18 Die while-Schleife

Der entscheidende Unterschied ist, dass Sie bei der while-Schleife die Erhöhung der Zählervariablen i++ weglassen können. Das Gleiche können Sie bei der for-Schleife nicht tun. Sie würde nicht kompiliert werden, sondern eine Fehlermeldung erzeugen. Wenn Sie die Erhöhung der Zählervariablen in der while-Schleife weglassen, erzeugen Sie eine Endlosschleife, wie Sie in Abbildung 3.27 sehen können. Abbildung 3.23 Die fehlende Iteration erzeugt eine Endlosschleife.

Eine Kontrollfunktion im Flash Player verhindert das endlose Ausführen des Scripts und erzeugt nach Erkennen der Endlosschleife nach 15 Sekunden die Fehlermeldung, wie in Abbildung 3.27 zu sehen.

Die do..while-Schleife Diese Schleife ist eine Abwandlung der while-Schleife. Der entscheidende Unterschied ist, dass die Schleife mindestens einmal durchlaufen wird und dann erst die Prüfung der Bedingungen erfolgt. Da diese Schleife eigentlich ein wenig absonderlich ist, möchte ich sie zumindest erwähnen und Ihnen in Abbildung 3.24 ein Codebeispiel geben.

124 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Abbildung 3.24 Diese do..while-Schleife gibt lediglich die Zahl 3 aus, was gewollt war, aber eigentlich wenig Sinn macht.

Es ist in diesem vorliegenden Fall ebenso möglich, die Erhöhung der Zählervariablen myNum++ wegzulassen, die Schleife erreicht while nicht, kann also auch die Bedingung nicht prüfen. Über Sinn und Unsinn dieser Schleife streiten sich »die Gelehrten« bereits seit einigen Jahren!

Arrays Für die Verarbeitung von größeren Datenmengen sind Arrays sehr bedeutsam. Stellen Sie sich auch hier am besten wieder einen Container vor, der verschiedene Elemente oder Bestandteile beinhaltet. Jedes dieser Bestandteile hat einen eindeutig identifizierbaren (Variablen-)Namen und kann sowohl anhand seiner Position mit seiner Nummer (indiziert) oder mit seinem Namen (assoziativ) gefunden werden. Anders ausgedrückt kann man sagen, dass in einem Array mehrere Werte als zusammenhängende Datenstruktur gespeichert werden. Wir unterscheiden zwei Grundtypen von Arrays: indizierte Arrays und assoziative Arrays. Darüber hinaus gibt es noch mehrdimensionale Arrays, die verschiedene ineinander verschachtelte Arrays beinhalten. Um noch einmal das Bild von dem Container zu bemühen: Nehmen wir an, Sie stehen vor den Gepäckschließfächern im Bahnhof. Jedes dieser Fächer hat eine eindeutige Nummer, da es sonst zu Verwechslungen der Schlüssel und damit der eingeschlossenen Gepäckstücke käme. Nun fügen wir dem Container schliessfaecher alle vorhandenen Schließfächer zu, wie Sie es im nachfolgenden Listing sehr gut sehen können: var schliessfaecher:Array = new Array("Schließfach1", "Schließfach 2", "Schließfach 3"); trace(schliessfaecher.length); //Ausgabe 3 trace(schliessfaecher[0]); //Ausgabe Schließfach 1 trace(schliessfaecher[1]); //Ausgabe Schließfach 2 trace(schliessfaecher[2]); //Ausgabe Schließfach 3 Listing 3.19 Das indizierte Array mit Elementen

125 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Der Bahnhofsvorsteher weiß also immer, wie viele Schließfächer sich in seiner Gepäckaufbewahrung befinden (schliessfaecher.length) und wie das entsprechende Schließfach bezeichnet wird (trace(schliessfaecher[0]); // Ausgabe Schließfach 1). Ebenfalls gut zu sehen an unserem Codebeispiel ist der Zugriff auf die einzelnen Einträge anhand der Nummer des Eintrags. Wobei zu beachten ist, dass in einem Array immer von 0 an gezählt wird. Das heißt, dass der erste Eintrag 0 ist, der zweite Eintrag 1 und so weiter. Also eigentlich genau das, was unser Beispiel zeigt. Aber schauen wir uns die indizierten Arrays noch einmal genauer an.

Indizierte Arrays Erstellen des Array-Objekts und seiner Instanz In den vorangegangenen allgemeinen Erläuterungen zu den Arrays habe ich Ihnen bereits ein Codebeispiel mit einem einfachen indizierten Array anhand unserer gedachten Gepäckaufbewahrung vorgestellt. Das Array-Objekt ist genau so zu behandeln wie jedes andere Objekt innerhalb von ActionScript. Nur, dass es nicht über die klassischen Eigenschaften wie etwa die Breite und die Höhe oder dergleichen verfügt, sondern über Elemente, die innerhalb des Arrays gespeichert werden und zum Abruf bereitstehen.

Erste Variante Ein Array-Objekt wird durch Aufruf des Array-Konstruktors erstellt und ohne Argumente, also leer, übergeben. Die Klammer nach dem Konstruktor new Array(); ist leer, das heißt, dass keine Elemente an das Array angehängt werden. Also muss die Abfrage nach der Anzahl der Einträge bzw. der Argumente im Array 0 sein und in der AUSGABE wird 0 erscheinen: var schliessfaecher:Array = new Array(); // Elemente in der Klammer fehlen trace(schliessfaecher.length); //Ausgabe 0 Listing 3.20 Das indizierte Array ohne Argumente

Zweite Variante Das Array-Objekt wird durch Aufruf des Array-Konstruktors erstellt und mit einer Zahl als einzigem Parameter erzeugt. Hier wird lediglich eine Anzahl Parameter in der Ausgabe erscheinen, die einzelnen Parameter ergeben lediglich ein undefined, da sie ja nicht definiert bzw. mit Werten versehen sind: var schliessfaecher:Array = new Array(5); // Nummer als Parameter // in der Klammer trace(schliessfaecher.length); //Ausgabe 5 trace(schliessfaecher[0]); //Ausgabe undefined trace(schliessfaecher[1]); //Ausgabe undefined trace(schliessfaecher[2]); //Ausgabe undefined

126 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

trace(schliessfaecher[3]); //Ausgabe undefined trace(schliessfaecher[4]); //Ausgabe undefined Listing 3.21 Das indizierte Array mit einer Zahl als Argument

Dritte Variante Wir erzeugen das Array-Objekt mit dem Array-Konstruktor und übergeben eine Liste mit einzelnen Elementen als Parameter für das Array: var schliessfaecher:Array = new Array("Schließfach 1", "Schließfach 2", "Schließfach 3"); // Mehrere Elemente sind dem Array zugewiesen trace(schliessfaecher.length); //Ausgabe 3 trace(schliessfaecher[0]); //Ausgabe Schließfach 1 trace(schliessfaecher[1]); //Ausgabe Schließfach 2 trace(schliessfaecher[2]); //Ausgabe Schließfach 3 Listing 3.22 Das Array ist mit Elementen gefüllt.

In der dritten Variante sehen Sie, dass wir mehrere Elemente an das Array anhängen und dass wir diese Elemente problemlos über den Index auslesen können. Dabei greifen wir einerseits auf die Länge des Arrays zu (...length) sowie auf die einzelnen Elemente (....schliessfaecher[0] usw.). Abbildung 3.25 Die FLVPlayback-Komponente wird auf der Bühne platziert und mit dem Instanznamen myVideoPlay versehen.

127 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Beispielsweise können Sie auf diese Weise Videos und Videodaten aus einem Array auslesen und auf der Bühne wiedergeben. Der nachfolgende Code beschreibt das Erzeugen des Arrays und das anschließende Laden des Videos aus dem indizierten Array. Voraussetzung hierbei ist, dass Sie bereits eine Instanz der FLVPlayback-Komponente mit dem Instanznamen myVideoPlay auf der Bühne etabliert haben: var myVideoList:Array = new Array("videos/vid_01.flv","videos/ vid_02.flv","videos/vid_03.flv"); myVideoPlay.source = myVideoList[2]; //Der Pfad: "videos/vid_03.flv"; Listing 3.23 Laden des Videos aus einem indizierten Array

Eine weitere Variante ist das Erzeugen des Arrays und der Komponente zur Laufzeit des Films. Das macht die Arbeit etwas umfangreicher, aber flexibler in der Steuerung der Prozesse. Der ActionScript-3.0-Code umfasst bei der Erzeugung der Komponente auch die Bestimmung ihrer Attribute wie Breite, Höhe und Position. Weiterhin wird auf diesem Wege auch gleich der Instanzname mit erzeugt: import import import import

fl.video.VideoEvent; // Importieren der benötigten Klassen fl.video.FLVPlayback; fl.video.VideoPlayer; flash.events.*;

//Erzeugen des Arrays für die Liste der Videos var myVideoList:Array = new Array("videos/vid_01.flv","videos/ vid_02.flv","videos/vid_03.flv"); //Erzeugen der FLVPlayback-Komponente zur Laufzeit auf der Bühne var myVideoPlay:FLVPlayback = new FLVPlayback; myVideoPlay.z = 0; myVideoPlay.x = 0; myVideoPlay.y = 15; myVideoPlay.height = 440; myVideoPlay.width = 500; myVideoPlay.autoPlay = true; //Hinweis: Die Skin-Datei muss mit auf den Server geladen werden, //wenn eine solche verwendet wird

myVideoPlay.skin ="SkinUnderPlaySeekStop.swf"; myVideoPlay.skinBackgroundColor = 0x666666; // die Komponente als untergeordnetes Element der Bühne hinzufügen addChild(myVideoPlay); //Initialisieren der Komponente myVideoPlay.source = myVideoList[2]; // Quelle zuweisen über ARRAY

128 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

trace(myVideoList[2]); //Ausgabe videos/vid_03.flv myVideoPlay.addEventListener(VideoEvent.READY, FilmReady); // Sichtbarmachen, wenn Film geladen mittels Ereignis: // VideoEvent.READY // Zur Kontrolle Anzeigen des »Fertig geladen« im Ausgabefenster function FilmReady(event:VideoEvent):void { myVideoPlay.skinBackgroundAlpha = 0.8; trace("Fertig geladen"); } Listing 3.24 Die FLVPlayback-Komponente wird zur Laufzeit erzeugt. Abbildung 3.26 Das Ergebnis mit den Anzeigen im AUSGABEFenster Video: DEWALT

Sie haben in diesem Abschnitt gesehen, dass Arrays in der Programmierung auf vielfältige Weise genutzt werden können. Besonders im Hinblick auf mehrsprachige Projekte oder auf größere Datenmengen, die zur Laufzeit des Flash Players geladen werden sollen, sind Arrays nützliche Hilfsmittel.

Assoziative Arrays Assoziative Arrays beziehen ihre Bedeutung aus der Möglichkeit, mit konkreten Begriffen (Strings) zu arbeiten. Dabei erfolgt der Zugriff auf die Elemente über 129 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Schlüssel-Wert-Paare, wie in den nachfolgenden Erläuterungen zu sehen ist. So wird für den Entwickler der Zugriff auf die Elemente des Arrays erleichtert. Eindeutige Begriffe wie zum Beispiel [koffer] (Listing 3.25) zu sehen, sind leichter nachzuvollziehen als der Vorgang, ein Element des Arrays über die Angabe der Zahl myVideoList[2] auszulesen (siehe Listing 3.24). In jedem der Schließfächer liegt beispielsweise ein Koffer, der wiederum jeweils über seine Farbe und sein Material eindeutig identifizierbar ist. Da wir hier nicht unbedingt mit der Nummerierung arbeiten wollen, benennen wir die Schließfächer, die Koffer und ihr Material als Schlüssel, vergeben anschließend an die Schlüssel die Werte und machen dadurch das Array »assoziativ«. Das ArrayObjekt Gepaeckfach wird über das Objekt-Literal mit drei Schlüssel-Wert-Paaren versehen (nachfolgend in verkürzter Schreibweise): var Gepaeckfach:Object = { schliessfach: "Eins", koffer: "Braun", material: "Plastik" } trace(Gepaeckfach[schliessfach], Gepaeckfach[koffer],Gepaeckfach[material]); //Ausgabe Eins Braun Plastik Listing 3.25 Auslesen des assoziativen Arrays

Die Vergabe der Schlüssel schliessfach, koffer und material ist assoziativ, also bezeichnend. Es wird demzufolge nicht die Zahl ausgelesen, sondern der assoziative Variablenname (Schlüssel) mitsamt seinem zugeordneten Wert. Abbildung 3.27 Der Zugriff auf das assoziative Array-Objekt erfolgt über Schlüssel-WertPaare.

Der Vollständigkeit halber möchte ich in Abbildung 3.28 noch die normale Schreibweise bei der Zuordnung von Attributen anführen. Abbildung 3.28 Aufbau des Arrays

130 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3.3 Programmelemente

Wenn Sie ein Array nicht explizit als Array deklarieren müssen, können Sie wie gezeigt auch direkt das Objekt-Literal einsetzen. ActionScript registriert automatisch, dass es sich um ein Array-Objekt handelt, und Sie können es auch als solches problemlos nutzen. Das nachfolgende Scripting zeigt Ihnen die Verwendung des Array-Konstruktors für die Erstellung eines assoziativen Arrays: var firmenInfo:Array = new Array(); firmenInfo["firma"] = "Arrunda"; firmenInfo["mitarbeiter"] = "2200"; firmenInfo["umsatz"] = "50 Mio "; trace(firmenInfo["firma"], firmenInfo["mitarbeiter"], firmenInfo["umsatz"]); // Ausgabe Arrunda 2200 50 Mio

Assoziative Arrays haben den Nachteil, dass Sie die Länge (length) ihrer Einträge nicht auslesen können und die Methoden der Array-Klasse hier nicht angewendet werden können. Daher eignet sich der Einsatz der Array-KonstruktorMethode eigentlich nur bei der Erstellung indizierter Arrays.

Mehrdimensionale Arrays Um eine größere Flexibilität beim Umgang mit Daten zu bekommen, können Sie mehrere Arrays miteinander kombinieren. Diese Einrichtung nennt man mehrdimensionale Arrays. Wie Sie beim einfachen indizierten Array bereits gesehen haben, vergeben wir nach Aufruf des Array-Konstruktors nacheinander die Werte für das Array, jeweils getrennt durch ein Komma.

Verknüpfung mehrerer indizierter Arrays Beim mehrdimensionalen Array ist das Ganze erweitert. Schauen Sie das nachfolgende Beispiel für die Verknüpfung zweier indizierter Arrays an: var einkaufsListe:Array = new Array(); einkaufsListe[0] = ["Brot", "Brötchen", "Knäckebrot"]; einkaufsListe[1] = ["Limonade", "Bier", "Saft"]; einkaufsListe[2] = ["Milch", "Butter", "Käse"]; einkaufsListe[3] = ["Zahnpasta"]; einkaufsListe[4] = ["Fensterputzmittel", "Badeschwamm"]; trace(einkaufsListe [1][1]); // Ausgabe Bier Listing 3.26 Mehrdimensionales Array

Mit dem Array-Zugriffsoperator ([]) greifen Sie auf die einzelnen Einträge in den Aufgabenlisten zu und lesen sie für die weitere Verwendung aus. Das erste Klammerpaar gibt die Position in der Einkaufsliste an, das zweite Klammerpaar die Produkte, die Sie bei diesem Einkauf besorgen wollen.

131 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Wenn Sie beispielsweise das zweite Produkt an Position [1] Ihrer Einkaufsliste abrufen möchten, verwenden Sie die Indexposition [1] und danach die Indexposition [1] für das zweite Produkt in der Liste (Bier). Wenn Sie das zweite Produkt der Liste an der Indexposition [2] abrufen möchten, verwenden Sie die Indexposition [2] und die Indexposition [2] für das dritte Produkt in der Liste (Käse). trace(einkaufsListe[2][2]); // Ausgabe Käse

Verknüpfung von assoziativen und indizierten Arrays Nehmen wir an, Sie wollen auch hier lieber nicht mit den Nummern, sondern mit klaren Begrifflichkeiten arbeiten. Dann könnte unser erweitertes Codebeispiel mit der Einkaufsliste wie in Abbildung 3.29 aussehen. Abbildung 3.29 Die Verknüpfung von assoziativen und indizierten Arrays

Sie sehen bei den trace-Anweisungen, dass wir die Punktsyntax für das Auslesen einsetzen. Diese Variante ist übersichtlicher, da wir ansonsten mit verschachtelten Klammern arbeiten müssten (Abbildung 3.27).

Die for..in-Schleife zum Durchlaufen der Arrays Wie beim indizierten Array können wir die for..in-Schleife einsetzen, um alle Einträge aus dem mehrdimensionalen Array auszulesen und anzeigen zu lassen. Der einzige Unterschied ist, dass wir mit einer eckigen Klammer [] arbeiten müssen, da wir ja mehrere ineinander geschachtelte Arrays gleichzeitig überprüfen (Abbildung 3.30). Die Reihenfolge der Ausgabe stimmt nicht mit der Anordnung des Arrays überein, da es sich bei der Einkaufsliste um ein assoziatives Array handelt. Daher wird das Array in der Abfolge willkürlich ausgegeben.

132 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3 . 4 Fu n k t i o n e n

Abbildung 3.30 Die for..in-Schleife durchläuft die Arrays und gibt alle Produkte in Zuordnung zur Produktgruppe aus.

3.4 Funktionen Funktionen werden in ActionScript immer einheitlich mit einem so genannten Bezeichner und den anschließenden runden Klammern () aufgerufen. Die runden Klammern bezeichnet man auch als Klammern-Operator. Dieser Operator gehört zu den primären Operatoren, die Sie bereits kennen gelernt haben.

Grundfunktionen Die Syntax einer Funktion: Bezeichner(Funktionsparameter) { ActionScript-Code im Funktionsblock }

In den bisherigen Listings haben wir ja sehr oft den Befehl trace(); verwendet. Dieser Befehl ist eigentlich eine Funktion. Die Ausführung dieser Funktion ist von ActionScript vordefiniert. Immer, wenn trace(); im Code auftaucht, wird eine Meldung an das Ausgabefenster mit den Funktionsparametern gegeben, die veranlasst, dass die gewünschte Ausgabe erfolgt. Vorausgesetzt, dass der Code fehlerfrei abgearbeitet werden kann. trace("Wir checken mit trace, ob das Scripting in Ordnung ist!"); Listing 3.27 Die Funktion trace();

Eine weitere ActionScript-basierte Funktion ist beispielsweise Math.random();, die ohne Parameter auskommt und lediglich eine Zufallszahl erzeugt: var myRandomNum:int = Math.random(); trace(myRandomNum); //Ausgabe 0.981713181361556 Listing 3.28 Math.random(); benötigt keine Parameter.

133 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Funktionsausdruck Aus früheren Versionen von ActionScript kennen wir die ausführlichere Variante der Funktion, die mit einem Funktionsausdruck aufgerufen wurde. Da diese Methode recht anschaulich zeigt, wie eine Funktion insgesamt aufgebaut ist, möchte ich Ihnen das Beispiel hier anführen: var myBeispiel:Function = function (myText:String, myNumber:int) { myBeispiel(myText, myNumber); }; trace("Hier ist der Text!", 20); // Ausgabe Hier ist der Text! 20 Listing 3.29 Die Funktion mit Funktionsausdruck

Diese Funktion mit einem Funktionsausdruck wird als Variable deklariert und beginnt daher mit dem Schlüsselwort var. Danach folgen: 1. 2. 3. 4. 5. 6.

Der Funktionsname myBeispiel Der Doppelpunktoperator : Die Function-Klasse, die den Datentyp festlegt Der Zuweisungsoperator = Das Schlüsselwort function Die Parameter in einer durch Kommas getrennten Liste (myText und myNumber) 7. Der ActionScript-Code im Funktionsrumpf, der in geschweifte Klammern eingeschlossen ist {...}

Funktionsanweisung In ActionScript 3.0 setzte sich nach der deutlichen Anlehnung an den ECMAStandard auch die strikte Zuweisung bei der Definition von Funktionen durch. Bevorzugen Sie für die zukünftige Arbeit diese Art des Funktionseinsatzes, wenn Sie nicht explizit auf die Anwendung der Funktion mit Funktionsausdruck zurückgreifen müssen. Die eingeführte Funktionsanweisung ist kürzer und daher besser überschaubar. Auch die Verarbeitung im Compiler bringt mehr Kompatibilität. Die Funktionsanweisung beginnt immer mit dem Schlüsselwort function und wird vervollständigt durch die einzelnen Bestandteile, die Sie in der folgenden Übersicht finden: 1. Der Funktionsname myBeispiel 2. Die Parameter in einer durch Kommas getrennten Liste und eingeschlossen vom Klammern-Operator () 3. Der Funktionsrumpf mit den ActionScript-Codeblöcken, eingeschlossen in geschweifte Klammern {} Unser umgewandeltes Beispiel (Listing 3.29) würde als Funktionsanweisung wie in Abbildung 3.31 aussehen.

134 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3 . 4 Fu n k t i o n e n

Abbildung 3.31 Die Funktion als Funktionsanweisung

Wie Sie sehen, sind Funktionsanweisungen wesentlich einfacher zu lesen als Funktionsausdrücke. Sie lassen sich zum Beispiel bei Anwendung der Punktsyntax sowohl im strikten Modus als auch im Standardmodus problemlos einsetzen. Abbildung 3.32 Sie bestimmen, nach welchem Modus Ihr Compiler den Code prüfen soll.

135 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Die Unterscheidung zwischen striktem Modus und Standardmodus stellen Sie ein, indem Sie die folgenden Schritte ausführen: 1. Wählen Sie DATEI|EINSTELLUNGEN FÜR VERÖFFENTLICHUNGEN. 2. Anklicken der Registerkarte FLASH. 3. Gehen Sie zu ACTIONSCRIPT-EINSTELLUNGEN. Im strikten Modus werden Warnungen als Fehler gemeldet, ohne deren Beseitigung keine erfolgreiche Kompilierung ausgeführt werden kann. Im Warnmodus werden Warnungen ausgegeben, die auf Inkompatibilitäten beim Aktualisieren von ActionScript-2.0-Code auf ActionScript 3.0 hinweisen und dadurch ebenfalls sehr nützlich sein können.

Zurückgeben von Funktionswerten Um Funktionswerte zurückgeben zu lassen, verwenden Sie die Anweisung return();. Die Anweisung return gibt, gefolgt von einem Wert oder einem Ausdruck, diesen zurück an das Programm.

Hinweis

Wenn Sie return in Ihren Funktionen einsetzen, bedenken Sie bitte, dass danach die Funktion beendet wird. Alle nachfolgenden Statements werden nicht mehr ausgeführt. Im nachfolgenden Listing gibt return(myNumber * 4) eine geänderte Anzahl von Parametern an die Funktion zurück: function meineRueckgabe(myNumber:int):int { return(myNumber * 4); } Listing 3.30 Der Einsatz von return();

Verschachtelte Funktionen Sie können Funktionen ineinander verschachteln, ohne Gefahr zu laufen, dass Ihr ActionScript-Code nicht ordnungsgemäß abgearbeitet wird. Natürlich nur unter der Voraussetzung, dass der Compiler keinen Fehler ausgibt (Abbildung 3.33). Abbildung 3.33 Verschachtelte Funktionen mit return-Anweisungen

136 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3 . 4 Fu n k t i o n e n

Im Listing aus Abbildung 3.33 können Sie gut sehen, dass die übergeordnete Funktion NameUndOrt() die beiden nachfolgenden Funktionen quasi umschließt. Durch die return-Anweisungen werden die Werte der Funktionen getName() und getOrt() zurückgegeben und dann in der Hauptfunktion zusammengefasst. In der Ausgabe, die wir per trace(NameUndOrt()); aktivieren, erscheinen dann die Rückgabewerte gemeinsam.

Funktionen aufrufen Funktionen können auf unterschiedliche Art und Weise aufgerufen werden. Eine Möglichkeit ist der Aufruf durch die Deklaration der Funktion, wie wir es in den vorangegangenen Ausführungen bereits gesehen haben.

Funktionsdeklaration Im nachfolgenden Beispiel wird die Funktion myFunction(); deklariert und mit entsprechenden Parametern (in Klammern) versehen. Nach der Deklaration der Funktion wird der Codeblock abgearbeitet. Dieser Codeblock steht innerhalb der geschweiften Klammern {}. Im Listing der Abbildung 3.34 erfolgt die Zuweisung des Wertes für gotoBed erst nach dem Codeblock. Dazu wird der Funktionsname aufgerufen und der Wert von gotoBed als String zurückgegeben an trace. Zugegeben etwas umständlich, aber für die Einsicht in den Ablauf von Funktionen recht nützlich. myDate wird als internes ActionScript-Objekt mit übergeben. Wenn wir das bei Aufruf von myFunction weglassen, kommt folgende Fehlermeldung: 1136: Falsche Anzahl von Argumenten. 2 erforderlich. Listing 3.31 Die Fehlermeldung bei falscher Argumentanzahl Abbildung 3.34 Der Funktionsaufruf durch die Deklaration

Der EventListener Eine weitere Möglichkeit, eine Funktion in ActionScript 3.0 aufzurufen, ist die Verwaltung von Ereignissen mit Hilfe eines EventListeners, der darauf achtet, dass für ein bestimmtes Objekt ein entsprechender Event-Aufruf erfolgt. An diesen Event-Aufruf ist dann wiederum eine Funktion gebunden.

137 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Dazu stellen Sie sich einfach eine Anzahl Schaltflächen vor, die beim Mausklick alle etwas anderes ausführen sollen. Wie schon erwähnt, bedient man sich hierzu des EventListeners und der damit aktivierten Funktion. import flash.events.MouseEvent; myBtn1.addEventListener(MouseEvent.CLICK, FunktionX); //Funktionsaufruf myBtn2.addEventListener(MouseEvent.CLICK, FunktionY); myBtn3.addEventListener(MouseEvent.CLICK, FunktionZ); function FunktionX(event:MouseEvent):void { Ausführung Codeblock1; } function FunktionY(event:MouseEvent):void { Ausführung Codeblock2; } function FunktionZ(event:MouseEvent):void { Ausführung Codeblock3 } Listing 3.32 Der Aufruf von Funktionen mit Hilfe des EventListener

Beachten Sie auch bei diesem Beispiel die Vergabe von Instanznamen an die Schaltflächen: myBtn1, myBtn2 und myBtn3. Ich will damit noch einmal deutlich machen, dass ein addEventListener in jedem Fall ein Objekt als Eigenschaften-Träger nutzt.

Anonyme Funktionen Diese Art von Funktionen wird nicht mit einem Funktionsnamen versehen und ist daher »anonym«. Das bedeutet, dass eine Anwendung bei anderen Objekten mittels einer solchen Funktion nicht möglich ist. Weiterhin setzt bei dieser Variante die automatische Formatierung im ActionScript-Bedienfeld aus. this.myClip.addEventListener(MouseEvent.MOUSE_DOWN, function (event:MouseEvent):void { event.currentTarget.rotation +=20; } ); Listing 3.33 Die anonyme Funktion

Wie Sie in dem Listing sehen, wird die Funktion direkt in den EventListener eingebunden. Achten Sie bei dieser Variante unbedingt darauf, die schließende runde Klammer anzufügen. Ansonsten gibt der Compiler eine Fehlermeldung aus. Es klappt zwar im Endergebnis ebenso gut wie bei einer Funktion mit Funktionsnamen, jedoch bleibt uns die weitere Verwendung der Funktion untersagt, da sie ja keinen Funktionsnamen hat. Die mit einem Namen versehene Funktion würde folgendermaßen aufgerufen werden: 138 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

3 . 4 Fu n k t i o n e n

this.myClip.addEventListener(MouseEvent.MOUSE_DOWN, drehen); Listing 3.34 Die gleiche, diesmal namentlich benannte Funktion function drehen(event:MouseEvent):void { event.currentTarget.rotation +=20; } Abbildung 3.35 Die beiden Funktionsarten nebeneinander gestellt

Auf der DVD-ROM zu finden: Flash_04/ Kap_04_function_06 .fla

Variablendeklaration im Überblick Schauen wir uns zum Schluss des Kapitels noch einmal in einem kurzen Überblick an, wie Variablen in PHP, JavaScript und ActionScript definiert werden. Besonders interessiert uns hierbei, ob eine Typisierung (Listing 3.4) notwendig ist oder nicht: $myName = "Heinz Mustermann" // Heinz Mustermann wird als Variablenwert mit dem // Typ:String gespeichert

... in PHP

$myPoints = 40 // 40 wird als Variablenwert mit dem Typ:integer gespeichert $myPrice = 50.9 // 50.9 wird als Variablenwert mit dem Typ:Float gespeichert Listing 3.35 Die Variablendeklaration in PHP

Sie sehen bei der Variablendeklaration in PHP keine explizite Datentypisierung. Die Zuweisung des entsprechenden Typs erfolgt automatisch. Sobald PHP Anführungszeichen in der Wertzuweisung entdeckt, wird der Typ: String vergeben. Dies gilt allerdings auch für Zahlen, die in Anführungszeichen gesetzt wer-

139 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090

Kapitel 3

PROGRAMMIERUNG – DIE GRUNDLAGEN

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

den. Ebenso wird beim Typ: integer (Ganzzahlen) und beim Typ: Float (Fließkommazahlen) verfahren. ... in JavaScript

var myName = "Heinz Mustermann" // Der Wert Heinz Mustermann wird //der Variablen automatisch als Typ:String zugewiesen var myPoints = 40 // 40 wird automatisch als Variablenwert mit dem //Typ:integer zugewiesen var myPrice = 50.9 // 50.9 wird automatisch als Variablenwert mit //dem Typ:Number zugewiesen Listing 3.36 Variablendeklaration in JavaScript

Auch bei JavaScript erfolgt die Zuweisung des Datentyps automatisch. JavaScript gilt also auch als »untypisiert«, man kann alle Daten ohne Deklaration und Zuordnung zu einem Typ verwenden. JavaScript wandelt je nach Notwendigkeit Daten in den jeweils erforderlichen Typ um.

Hinweis

... in ActionScript 3.0

Sie sehen beim Typ Number bereits einen wichtigen Unterschied zum Typ Float bei PHP. In beiden Fällen handelt es sich um Fließkommazahlen, jedoch mit unterschiedlicher Begrifflichkeit. Es wird in JavaScript nach dem ECMA-Standard der Typ Number verwendet. var myName:String = "Heinz Mustermann" // Der Wert Heinz Mustermann //wird der Variablen als Typ:String zugewiesen var myPoints:int = -40 // -40 wird als Variablenwert mit dem Typ:int zugewiesen var mySpeed:uint = 220 // 220 wird als Variablenwert mit dem Typ:uint //zugeweisen (positive Zahl) var myPrice:Number = 50.9 // 50.9 wird als Variablenwert mit dem Typ:Number zugewiesen Listing 3.37 Strikte Datentypisierung in ActionScript 3.0

Damit sind wir am Ende der Einführung in die Programmier-Grundlagen von ActionScript 3.0 angekommen. Vieles von dem, was Sie jetzt bereits gelesen oder noch besser: durchgearbeitet haben, gilt nicht nur für die Programmierung in ActionScript, sondern auch für JavaScript und PHP. Darüber hinaus finden Sie, besonders im Bereich OOP (objektorientiertes Programmieren), noch wesentlich mehr interessante Ansatzpunkte bei anderen Programmiersprachen.

140 © des Titels »Professionelle Webentwicklung mit Adobe Flash CS4« (ISBN 978-3-8266-5090-1) 2009 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5090