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

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

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

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


Rheinwerk Computing - Zum Seitenanfang

4.6 Funktionen  topZur vorigen Überschrift

Das Ziel von Funktionen ist, Funktionalität, sprich eine Reihe von Anweisungen, zur Verfügung zu stellen. Der Vorteil besteht darin, dass Sie Funktionalität beliebig oft verwenden können. Ein Nebeneffekt liegt außerdem im besser strukturierten Code.


Funktionsnamen

Funktionsnamen sind wie Variablennamen so genannte Bezeichner. Deswegen gelten für sie dieselben Regeln wie für Variablennamen (siehe am Anfang dieses Kapitels im Abschnitt »Variablennamen«).


Erkennbar sind Funktionen an dem Schlüsselwort function:

function Funktionsname() {
   Anweisungen;
}

Diese Syntax deklariert eine Funktion, das heißt, die Funktion ist jetzt in ActionScript verfügbar. Passiert ist aber noch nichts, die Anweisungen in einer Funktion werden nicht automatisch ausgeführt. Um dies zu bewerkstelligen, benötigen Sie einen Funktionsaufruf:Funktionsname(); Testen Sie nun Schritt für Schritt einen Funktionsaufruf:

Schritt für Schritt: Arrays und Objekte
1. Schlüsselwort und Funktionsname eingeben
       

Fügen Sie zuerst das Schlüsselwort function und den Funktionsnamen, gefolgt von runden Klammern und einer geschweiften Klammer, ein. Testen Sie das Skript am besten im ersten Schlüsselbild eines leeren Films.

function ausgabe() {
2. Ausgabe-Anweisung ergänzen
       

Fügen Sie jetzt die Ausgabe-Anweisung hinzu und schließen Sie den Anweisungsblock:

   trace("Diese Ausgabe stammt von einer Funktion!");
}

Nun rufen Sie die Funktion auf:

ausgabe();
3. Funktion aufrufen
       

Abbildung 4.22 Die Ausgabe ist unspektakulär, stammt aber von einer Funktion.


Ordnungswut

Wenn Sie Anweisungen in eine Funktion packen, sind sie gut aufgehoben. Um Ordnung zu gewährleisten, sollten Sie allerdings nur inhaltlich zusammengehörige Anweisungen in eine Funktion schreiben. Wenn Sie beispielsweise eine Summe berechnen und eine Information aus einem Textfeld ändern möchten, empfehlen wir zwei getrennte Funktionen einzusetzen.


Hier sehen Sie den großen Vorteil, Code wieder zu verwenden: Sie könnten den Funktionsaufruf mehrmals untereinander schreiben und bekämen immer dieselbe Ausgabe. Oder Sie arbeiten mit einer Schleife und rufen die Funktion in der Schleife als Anweisung auf. Eine Menge Möglichkeiten, die wir in den Anwendungsbeispielen dieses Buches nutzen werden. Übrigens, der Funktionsaufruf kann im Code auch vor einer Funktion stehen. Flash legt – etwas vereinfacht ausgedrückt– alle Funktionen gleich zu Anfang im Speicher ab und erlaubt so jederzeit den Zugriff.

Wenn Sie eine Funktion aus einer anderen Zeitleiste als der aktuellen aufrufen möchten, müssen Sie allerdings die Zeitleiste korrekt adressieren (siehe Kapitel 2, »ActionScript in Flash«, Abschnitt »Zugriff auf MovieClips«). Liegt die Funktion in der Hauptzeitleiste, müssten Sie bei absoluter Adressierung zum Funktionsaufruf also: _root.funktionsname(); schreiben.

Parameter

Bis jetzt ist unsere Funktion ein abgeschlossener Anweisungsblock ohne Kontakt zur Außenwelt. Das ist aber eher unpraktisch, falls Sie in der Funktion etwas berechnen oder unterschiedliche Informationen ausgeben möchten. Für solche Zwecke gibt es Parameter. Sie sind Platzhalter für Werte, die erst beim Aufruf der Funktion übergeben werden. Innerhalb von Funktionen arbeiten Sie mit Parametern genauso wie mit Variablen.

Eine Funktion kann beliebig viele Parameter besitzen. Sie werden in die runden Klammern nach dem Funktionsnamen geschrieben und durch Kommas getrennt. Den Typ des Parameters benötigen Sie natürlich nur in ActionScript 2.0. In ActionScript 1.0 und in allen Flash-Versionen ab MX und älter gibt es keine strikte Typisierung. Sie müssen hier sogar den Typ weglassen, um keine Fehlermeldung zu erhalten:

function Funktionsname(Parameter1:Typ, Parameter2:Typ) {
   Anweisungen;
}

Beim Aufruf müssen die Werte für die Parameter mit übergeben werden:

Funktionsname(Parameter1Wert, Parameter2Wert);

Und so sieht das in der Praxis aus:

function ausgabe(ausgabe_str:String) {
   trace(ausgabe_str);
}

Abbildung 4.23 Der als Parameter übergebene String landet im Ausgabe-Fenster.

Die Funktion erwartet einen Parameter. Der Datentyp des Parameters folgt bei der strikten Typisierung nach dem Parameternamen. Nun rufen Sie die Funktion auf und übergeben einen String als Wert:

ausgabe("Wert für die Ausgabe");
Rückgabewerte

Bis jetzt haben wir mittels Parameter nur Werte in eine Funktion hineingestellt. Eine Funktion kann aber auch etwas zurückliefern, und zwar mit Hilfe des Schlüsselwortes return. Alles was nach return als Rückgabewert folgt, wird zurückgegeben. Hier die zugehörige Syntax:

function Funktionsname(Parameter1:Typ, Parameter2:Typ):Typ {
   Anweisungen;
   return Rückgabewert;
}

Beachten Sie: Alle Anweisungen, die Sie nach return schreiben, werden ignoriert. Hinter den runden Klammern geben Sie bei konsequent durchgeführter strikter Typisierung den Datentyp des Rückgabewertes der Funktion an. Für Flash MX lassen Sie den Typ natürlich weg, da Flash MX nur ActionScript 1.0 und damit lose Typisierung unterstützt.


Mehrere Rückgaben

return erlaubt nur die Rückgabe von einem Wert. Möchten Sie mittels Funktion mehrere Werte zurückgeben, stehen Ihnen zwei Wege offen: Sie liefern einen Array zurück, der die Werte enthält (siehe Abschnitt »Arrays«). Oder Sie arbeiten mit globalen Variablen und ohne Rückgabewerte (siehe nächster Abschnitt, »Gültigkeitsbereich«).


Was passiert nun mit dem Rückgabewert? Er wird an den Funktionsaufruf weitergeleitet. Ihre Aufgabe ist es, den Rückgabewert zu speichern. Hierfür bietet sich natürlich eine Variable an. So sieht das in der Theorie aus:

var Variablenname:Datentyp = Funktionsname(Parameter1 
Wert, Parameter2Wert);

Nun werfen Sie einen Blick auf die praktische Anwendung von Rückgabewerten. Die folgende Funktion berechnet die Summe aus zwei Parametern und liefert sie zurück:

function summe(a_num:Number, b_num:Number):Number {

var summe_num:Number = a_num + b_num;

return summe_num;

}

Beim Funktionsaufruf werden die Parameter übergeben, der Rückgabewert landet direkt in der Variablen erg_num. Diese Variante, einen Funktionsaufruf einer Variablen zuzuweisen, sollten Sie sich merken, da sie in der Praxis sehr gebräuchlich ist. Zum Schluss geben Sie noch das erg_num mit trace() aus.

var erg_num:Number = summe(2, 3);
trace(erg_num.toString());

Abbildung 4.24 Die Funktion gibt das Ergebnis zurück, das jetzt weiter verarbeitet werden kann.

Das eben gezeigte Beispiel können Sie auch in Kurzform darstellen. In der Funktion lassen Sie dazu einfach die Variable für die Summe weg:

function summe(a_num:Number, b_num:Number):Number {
   return a_num + b_num;
}

Stilfrage

Wie kurz Ihre Skripte werden, ist nicht zuletzt eine Frage des Programmierstils. Prinzipiell lässt sich aber sagen: Je kürzer, desto weniger Tipparbeit, aber auch desto unübersichtlicher. Wir pflegen in diesem Buch einen eher ausführlichen Stil nach dem Motto: lieber eine Variable zu viel als eine zu wenig.


Den Funktionsaufruf schreiben Sie direkt in die trace()-Anweisung.

trace(summe(2, 3));

Damit haben Sie zwei Zeilen gewonnen. Allerdings ist das Skript ein wenig unübersichtlicher geworden und der Rückgabewert der Funktion steht nicht mehr für andere Anweisungen zur Verfügung.

Gültigkeitsbereich

Bereits im Abschnitt »Variablen« hatten wir schon über den Gültigkeitsbereich gesprochen. Aber erst jetzt, wo Sie Funktionen kennen, wird dieses Thema richtig interessant. Sie erinnern sich: Eine Variable ist lokal, wenn sie innerhalb einer Funktion initialisiert wird. Eine lokale Variable überstimmt immer eine Zeitleisten-Variable mit gleichem Namen. Sehen Sie sich das im folgenden Beispiel an:

var text_str:String = "Ich bin eine Zeitleisten-Variable.";
ausgabe();
function ausgabe() {
   trace(text_str);
   var text_str:String = "Ich bin eine lokale Variable.";
   trace(text_str);
}
trace(text_str);

Zuerst wird innerhalb der Funktion die Zeitleisten-Variable ausgegeben, da es noch keine lokale Variable gibt. Sobald eine gleichnamige lokale Variable existiert, wird sie innerhalb der Funktion eingesetzt. Die Ausgabe nach der Funktion verwendet immer die Zeitleisten-Variable, denn die lokale Variable gibt es außerhalb der Funktion überhaupt nicht.

Abbildung 4.25 Innerhalb der Funktion überstimmt die lokale Variable die globale.

on (release) {
   trace(text_str);
}

Übrigens, das Ereignis release tritt immer dann ein, wenn der Nutzer auf einer Schaltfläche (oder einem MovieClip mit Schaltflächen-Eigenschaften) die Maustaste loslässt. Es ist das Standardereignis, um das Anklicken einer Schaltfläche abzufangen.

Abbildung 4.26 Die vierte Ausgabe erfolgt in einem Schaltflächen- Symbol und verwendet die Zeitleisten-Variable.

Rekursive Funktionen

Eine rekursive Funktion ruft sich selbst auf. Das klingt zuerst verrückt, wer würde sich schon selbst anrufen oder eine SMS an die eigene Adresse schicken? In der Programmierung hilft dieser Trick aber manchmal, eine Aktion immer wieder mit jeweils geänderten Werten auszuführen. Wer den Abschnitt zu Schleifen aufmerksam gelesen hat, wird sicher sagen: Das ist doch die Aufgabe einer Schleife? Stimmt, und genau deswegen werden rekursive Funktionen selten verwendet. Schleifen erledigen dieselbe Aufgabe meistens schneller. Es gibt aber Fälle, in denen rekursive Funktionen sinnvoll sein können, beispielsweise bei komplexen Animationen. Wir zeigen Ihnen gleich ein Beispiel:

function rekursiv(i:Number) {
   if (i < 15) {
      trace(i);
      rekursiv(++i);
   }
}
rekursiv(1);

Die Funktion rekursiv() besitzt einen Parameter, und zwar die Variable i. Sie enthält eine if-Fallunterscheidung mit einer Bedingung: Nur wenn i kleiner als 15 ist, wird i ausgegeben (trace(i)) und die Funktion erneut aufgerufen. Sie erinnern sich an das Inkrement, die zwei Plus-Zeichen hintereinander (++)? Sie erhöhen i um 1. Da sie hier vor dem Variablennamen stehen, wird i vor der Anweisung, also vor dem erneuten Aufruf der Funktion, um 1 erhöht. Stünde das Inkrement nach dem Variablennamen, würde i nicht mehr vor dem erneuten Funktionsaufruf hochgezählt. Sie würden damit eine Endlosschleife produzieren!

Abbildung 4.27 Die rekursive Funktion bewirkt dasselbe wie einige Schleifen vorher.

Fertige Funktionen in ActionScript

trace(), Number(), String() etc. sind Funktionen – allerdings keine von Ihnen definierten, sondern von ActionScript zur Verfügung gestellte. Eine Übersicht über die vorhandenen Funktionen finden Sie direkt in Flash: im Aktionen-Bedienfeld in der Gruppe Globale Funktionen (1) .

Unter Umwandlungsfunktionen (2) sehen Sie Number(), String() und Konsorten, um den Datentyp einer Variablen zu wechseln. trace() hat sich dagegen unter Verschiedene Funktionen (3) versteckt.

Abbildung 4.28 Im Aktionen-Bedienfeld gehört den globalen Funktionen ein eigener Bereich.



Ihre Meinung

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

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

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: JavaScript






 JavaScript


Zum Rheinwerk-Shop: jQuery






 jQuery


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


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






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


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




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


Nutzungsbestimmungen | Datenschutz | Impressum

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

Cookie-Einstellungen ändern