Funktionen

Ergebnis der swf-Datei

Optisch hat sich nichts verändert, aber im Programmcode wurden zwei neue Funktionen verwendet.

Funktionen

Mittels einer Funktion kann man einen Anweisungsblock zusammenfassen und mit einem Namen versehen (= Funktionsdeklaration).
Unter diesem Namen kann der Programmblock angesprochen und in anderen Anweisungen, ohne den Programmcode immer wieder neu schreiben zu müssen, verwendet werden (= Funktionsaufruf).
In diesem Sinn kann man eine Funktion auch als Abkürzung für einen Programmblock betrachten. Dadurch kann die Lesbarkeit von komplexeren Programmen erhöht werden. Denn eine längere Programmsequenz wird durch einen sprechenden Namen abgekürzt. Man kann sich dadurch vorstellen, was beim Funktionsaufruf passiert und eine detailierte Definition erfolgt später (z.B. weiter unten im Programmcode).

Innerhalb des Anweisungsblocks der Funktion können Variable vorkommen, die vor Beginn der Abarbeitung des Blocks mit konkreten Startwerten belegt sein müssen. Diese Varibalen speichern den Input der Funktion und werden auch als Eingabeparameter bezeichnet. Bei einem Funktionsaufruf werden an diese Eingabeparameter die Startwerte übergeben.
Bei der Abarbeitung des Anweisungsblocks werden diese Eingabewerte verwendet, um bestimmte Anweisungen und Berechnungen durchzuführen.
Als Ergebnis eines Funktionsaufrufs und der dadurch ausgelösten Anweisungen (Berechnungen) kann ein bestimmter (Speicher-)Zustand als Ausgabewert zurückgegeben (= return-Anweisung) werden. Dieser Rückgabewert kann anschließend in einer Varibalen zwischengespeichert oder innerhalb eines Terms weiterverarbeitet werden.

Man sollte immer vor einer Funktionsdeklaration in einem Kommentar die Funktion allgemein beschreiben und die Ein- und Ausgabeparameter, deren Typ und Bedeutung genau angeben.

Es gibt Funktionen, die ohne Input und Output auskommen. Siehe die nachfolgende Funktion fillStage().
Manche Funktionen liefern ohne Input einen Output. Wiederum andere benötigen einen Input, liefern jedoch keinen Output.

Welchen Sinn haben Funktionen, die keinen Output liefern?

Man könnte annehmen, dass Funktionen, die keinen Output liefern, sinnlos sind.
Streng genommen ist das auch so, wenn man eine Funktion als abgeschlossene Input-Output-Maschine betrachtet, die Input erhält, während der Abarbeitung keinen "Kontakt nach außen" hat (keine side-effects) und abschließend den Output zurückliefert.

In vielen Programmiersprachen können jedoch im Anweisungsblock einer Funktion sogenannte globale Variable verändert oder Methoden aufgerufen werden, die zu einer Gesamtzustandsveränderung führen, obwohl die Funktion keinen Rückgabewert liefert. In diesem Fall hat die Ausführung der Funktion side-effects und liefert einen "versteckten" Output.
In der Regel sollte man side-effects vermeiden.

Der Programmcode ohne Erklärungen

Codeabschnitte, die sich nicht vom vorigen Arbeitsschritt unterscheiden, werden grau geschrieben.

// BÜHNENRECHTECK MIT FARBE FÜLLEN UND KONTURIEREN
fillStage();
/*
ZEICHNEN EINER WELLENLINIE
*/
this.lineStyle(2, 0xFF0000);
var m:Number = Stage.height/2;
this.moveTo(0, m);
for (var i:Number = 0; i<6; i++) {
   if (
even(i)) {
      this.curveTo(i*100+50, m-70, i*100+100, m);
   } else {
      this.curveTo(i*100+50, m+70, i*100+100, m);
   }
}

/*
DEKLARATION DER FUNKTIONEN fillStage() UND even()
*/
function fillStage():Void {
   this.lineStyle(1, 0x000000);
   this.beginFill(0xFFFFCC);
   this.moveTo(0, 0);
   this.lineTo(Stage.width-1, 0);
   this.lineTo(Stage.width-1, Stage.height-1);
   this.lineTo(0, Stage.height-1);
   this.lineTo(0, 0);
   this.endFill();
}
function even(z:Number):Boolean {
   return z/2 == Math.floor(z/2);
}


Der Programmcode mit Erklärungen

Die Funktion fillStage

function fillStage():Void {
   this.lineStyle(1, 0x000000);
   this.beginFill(0xFFFFCC);
   this.moveTo(0, 0);
   this.lineTo(Stage.width-1, 0);
   this.lineTo(Stage.width-1, Stage.height-1);
   this.lineTo(0, Stage.height-1);
   this.lineTo(0, 0);
   this.endFill();
}

In dieser Funktionsdeklaration wird die bekannte Sequenz von Anweisungen durch den Namen fillStage abgekürzt.
Mit dem Schlüsselwort function wird eine Funktionsdeklaration eingeleitet, gefolgt vom Funktionsnamen.
Die Funktion fillStage braucht keinen Input, daher die leere Inputparameterliste () und liefert keinen Output, daher :Void
Im Anweisungsblock zwischen { } wird auf die Bühneneigenschaften und Zeichenmethoden für Movieclips zugegriffen, die die Bühne einfärben und konturieren. Das ist der gewünschte side-effect bzw. versteckte Output der Funktion.

fillStage();

In der obigen Anweisung erfolgt der Funktionsaufruf. Ein Funktionsaufruf kann im Programmcode vor der Funktionsdeklaration stehen.

Die Funktion even (even, engl. = gerade)

Die Funktion even ermittelt, ob eine ganze Zahl gerade oder ungerade ist.
Input:       z, eine ganze Zahl
Output:  true, wenn z gerade und false, wenn z ungerade ist

function even(z:Number):Boolean {
   .....
}

Die Funktion even hat den Inputparameter z vom Typ Number und liefert einen Output vom Typ Boolean.
Eine Variable vom Typ Boolean kann die Werte true und false annehmen.

return z/2 == Math.floor(z/2);

In der oben stehenden Anweisung wird der Inputparameter z verwendet. Durch den Vergleichsoperator == liefert der Term z/2 == Math.floor(z/2) einen Wert vom Typ Boolean, der durch die Anweisung return an den Programmteil, der die Funktion even aufgerufen hat, zurückgegeben wird.

if (even(i)) {
   this.curveTo(i*100+50, m-70, i*100+100, m);
} else {
   this.curveTo(i*100+50, m+70, i*100+100, m);
}

Die Funktion even wird in der Bedingung der if-Anweisung mit der Zählvariablen i als Input aufgerufen, liefert einen boolschen Wert zurück und in Abhängigkeit davon wird der then- oder else-Zweig der if-Anweisung abgearbeitet.

exception handling (Behandlung von falschem Input)

In der obigen Funktiondeklaration von even wird nicht geprüft, ob der Input wirklich eine ganze Zahl. Es könnte auch eine beliebige Dezimalzahl sein.
Genau genommen müsste man zusätzlich ein exception-handling programmieren, in dem geprüft wird, ob z eine ganze Zahl ist. Wenn das nicht der Fall ist, soll eine Fehlermeldung erfolgen.
Das würde aber in diesem Stadium der Programmierkenntnisse zu weit führen.