4.3 Selbsterstellte Funktionen
Neben den bereits vordefinierten Funktionen können Sie auch selber Funktionen schreiben. Das lohnt sich immer dann, wenn ein Anweisungsblock an verschiedenen Stellen Ihres Programms immer wieder benutzt wird bzw. wenn eine bestimmte Aufgabe immer wieder ausgeführt werden soll. Z.B. könnten Sie für mathematische Anwendungen eine Funktion schreiben, die berechnet, ob eine Zahl eine Primzahl ist oder nicht.
Neben der Einsparung von mehrfacher Schreibarbeit, die Sie durch den Einsatz von Funktionen erreichen, bieten sie auch noch andere Vorteile. Im Allgemeinen werden Ihre Programme dadurch übersichtlicher und verständlicher, weil Sie nicht mehr viele Anweisungen zur Erledigung einer Aufgabe schreiben müssen, sondern nur den Funktionsaufruf. Außerdem ermöglichen Sie so die Arbeit im Team – ein Kollege schreibt eine Funktion, ein anderer schreibt die HTML-Seite mit dem Skript, das den Aufruf der Funktion enthält. Auch wenn insbesondere dieser letzte Vorteil für Sie an dieser Stelle noch nicht relevant ist, lohnt es sich, sich jetzt schon mit Funktionen zu beschäftigen.
Eine Funktionsdefinition
wird in JavaScript stets mit dem Wort
function eingeleitet.
Danach folgt von einem Leerzeichen getrennt der
Funktionsname mit anschließenden runden Klammern. Der
Funktionsname darf genau wie die Namen von Variablen aus den
Buchstaben des Alphabets, Ziffern und dem Unterstrich bestehen und
darf nicht mit einer Ziffer beginnen. Die Klammern kennzeichnen eine
Funktion als solche und können Parameter enthalten, die man der
Funktion übergeben kann, wie wir später noch sehen werden.
Innerhalb der darauffolgenden geschweiften Klammern wird die
Anweisungskette geschrieben, die bei Aufruf der Funktion
ausgeführt werden soll:
<script type="text/javascript">
function Funktionsname() {
Anweisungen innerhalb der Funktion
}
</script>
Zwei Beispiele zur Veranschaulichung der Syntax:
1. Skriptbeispielfunction()
<html>
<head>
<title>Beispiel einer Funktion</title>
<script type="text/javascript">
function schreiben() {
document.write("Diesen Text schreibt eine Funktion!<br>");
}
</script>
</head>
<body>
<script type="text/javascript">
schreiben();
schreiben();
schreiben();
schreiben();
</script>
</body>
</html>
Ansehen
In diesem sehr einfachen Beispiel für eine Funktion in
JavaScript enthält die Funktion lediglich eine Anweisung, die den
Text "Diesen Text schreibt eine Funktion!" gefolgt vom HTML-Tag
für einen Zeilenumbruch ausgibt. Die Definition der Funktion
schreiben() erfolgt hier in einem script-Element im Kopf des
Dokuments. Beim Aufruf der Funktion im body-Element – im Skript
steht der Funktionsname gefolgt vom Klammerpaar, genau wie bei den
vordefinierten Funktionen – springt der Interpreter zur
Definition der Funktion und führt die dort stehende Anweisung
aus. Im Beispiel wird also nur eine Textzeile ins Dokument
geschrieben. Durch den mehrfachen Aufruf der Funktion wird der gleiche
Text hier insgesamt viermal ausgegeben.
Bitte beachten Sie, dass die Anweisungen tatsächlich erst beim Funktionsaufruf ausgeführt werden. Bei der Definition "überliest" der Interpreter die Zeilen zwischen öffnender und schließender geschweifter Klammer der Funktion einfach.
Sicherlich macht es nur bedingt Sinn, solch kurze Funktionen wie im obigen Beispiel zu schreiben, denken Sie aber an längere oder kompliziertere Anweisungsfolgen. Man könnte diese zwar auch mit einem Editor kopieren und an der gewünschten Stelle wieder einfügen; sollte dies aber häufiger geschehen, würde auch ein entsprechend langer und umfangreicher Quelltext entstehen. Und wenn Sie die kopierte Skriptpassage dann einmal ändern wollen, müssen Sie das an vielen Stellen tun. Mit der einmaligen Erstellung der Funktion und dem sehr kurzen Aufruf an der entsprechenden Stelle im Programm kann man diese Problematik nun recht einfach und komfortabel umgehen.
Es folgt ein etwas umfangreicheres Skript als Beispiel, das die Verwendungsmöglichkeiten von Funktionen deutlicher macht:
2. Skriptbeispielfunction()
<script type="text/javascript">
var anzahlAufrufe = 0;
function zaehlen() {
anzahlAufrufe++;
alert(anzahlAufrufe + ". Funktionsaufruf");
}
</script>
<body>
<a href="javascript:zaehlen()">Start</a>
</body>
Ansehen
In diesem Beispiel wird die Funktion namens zaehlen()
ausgeführt, wenn Sie auf den Link Start klicken. Sie bekommen
dann ein kleines Ausgabefenster mit einer Meldung über die
Anwendungshäufigkeit der Funktion. Diesen Vorgang können Sie
beliebig oft wiederholen.
Um die Funktion zaehlen() aufzurufen, wurde ein sogenannter
Inline-Aufruf in dem <A>-Tag benutzt. Statt im Attribut href die
Adresse einer anderen Seite anzugeben, wurde hier der eigentliche
Funktionsaufruf geschrieben. Am Wort javascript erkennt der Browser,
dass es sich hier nicht um einen normalen Hyperlink handelt, sondern
um eine JavaScript-Anweisung. Durch Klicken auf den Text "Start" wird
die Funktion aufgerufen. Auch hier springt der Interpreter dabei
wieder zur Definition der Funktion zaehlen() und führt die dort
stehenden Anweisungen aus. Zuerst wird also die Variable anzahlAufrufe
um eins erhöht, dann folgt die Ausgabe.
Interessant ist die Variable anzahlAufrufe. Wie Sie sehen, steht die
Anweisung var anzahlAufrufe = 0; außerhalb der Funktion, also
außerhalb der zugehörigen geschweiften Klammern. Diese
Anweisung wird also, wie Sie es aus den bisherigen Lerneinheiten
kennen, ausgeführt, wenn der Benutzer die Seite aufruft, und zwar
nur einmal. Während die Anweisungen innerhalb der Funktion bei
jedem Klick auf den Link wieder und wieder abgearbeitet werden, wird
diese Zuweisung nur einmal zu Beginn ausgeführt. So wird
gewährleistet, dass die Funktion tatsächlich die Anzahl
ihrer Aufrufe zählen kann.
Um Funktionen sinnvoll einzusetzen, gibt es eine Regel, an die Sie sich nach Möglichkeit halten sollten:
Grundsätzlich können Sie script-Elemente mit
Funktionsdefinitionen überall in einer HTML-Seite unterbringen.
Sinnvollerweise definieren Sie Funktionen allerdings im Kopf der
HTML-Seite, da dieser Teil als erstes vom Browser gelesen wird. Das
heißt, dass die script-Elemente mit Funktionsdefinitionen
innerhalb des head-Elements stehen sollten. Wenn Sie Funktionen an
beliebigen Stellen im HTML-Dokument definieren, erhöht sich die
Wahrscheinlichkeit, Fehler zu machen: Wenn eine Funktion bereits
aufgerufen wird, bevor ihre Definition geladen wurde, kommt es zu
einer Fehlermeldung. Außerdem bewahren Sie sich eine gewisse
Übersichtlichkeit, wenn Sie Ihre selbst erstellten Funktionen im
Kopf der Seite bündeln.
Noch besser ist es, wenn Sie Ihre selbst geschriebenen Funktionen in
eine zweite Datei (im folgenden Beispiel mit dem Namen funktionen.js)
auslagern und diese dann per
<script src="funktionen.js" type="text/javascript">
in das HTML-Dokument einbinden. Das bietet den Vorteil, dass Sie eine
Funktion nicht nur in der Datei benutzen können, in der Sie sie
definiert haben, sondern in allen HTML-Dokumenten, die die Datei mit
den Funktionsdefinitionen einbinden.
Übung 4.5:
Programmieren Sie die Funktion schreiben() aus dem Beispiel und
speichern Sie sie in einer eigenen Datei.
Übung 4.6:
Schreiben Sie Ihr erweitertes Rechenprogramm aus Übung 4.4 und das
auf eval() basierende Programm aus Übung 4.3 in jeweils eine
Funktion. Speichern Sie die beiden Funktionen in einer eigenen Datei.
Gestalten Sie dann eine HTML-Seite, in der Sie für beide Funktionen
einen Link unterbringen, mit dem sie aufgerufen werden können.
