Sie sind hier 447
Funktionen erster Klasse
var allCanFly = processPassengers(passengers, checkNoFlyList);
if (!allCanFly) {
console.log("Das Flugzeug kann nicht starten. Es gibt einen Passagier auf der No-
Fly-Liste.");
}
var allPaid = processPassengers(passengers, checkNotPaid);
if (!allPaid) {
console.log("Das Flugzeug kann nicht starten: Jemand hat nicht bezahlt.");
}
Probefahrtflug für unser Flugzeug
Eine Funktion an eine andere übergeben
In Ordnung. Wir haben eine Funktion, die eine andere Funktion als Argument
übernehmen kann (processPassengers), und wir haben zwei Funktionen, die als
Argumente übergeben werden können (checkNoFlyList und checkNotPaid).
Bitte einen Trommelwirbel. Es ist Zeit, alles zusammenzubauen.
Die Übergabe einer Funktion an
eine Funktion ist einfach. Wir
benutzen einfach den Namen der
Funktion als Argument.
Hier übergeben wir die Funktion checkNoFlyList.
Dadurch kann processPassengers für jeden
Passagier überprüfen, ob er sich auf der No-Fly-
Liste befindet.
Befindet sich ein Passagier auf der No-Fly-Liste, wird false
zurückgegeben, und diese Nachricht erscheint auf der Konsole.
Hier übergeben wir die Funktion
checkNotPaid, damit processPassengers
überprüfen kann, welche Passagiere noch
nicht bezahlt haben.
Hat ein Passagier nicht bezahlt, geben
wir false zurück und sehen diese
Nachricht auf der Konsole.
Um Ihren Code zu testen, bauen Sie diesen
JavaScript-Code einfach in Ihre Standard-HTML-
Seite ein und rufen sie im Browser auf.
JavaScript-Konsole
Das Flugzeug kann nicht starten. Es gibt einen
Passagier auf der No-Fly-Liste.
Das Flugzeug kann nicht starten: Jemand hat
nicht bezahlt.
Sieht aus, als könnten wir
noch nicht losfliegen. Es
gibt Probleme mit unseren
Passagieren. Gut, dass wir
getestet haben …
Erste Klasse ist immer besser
– ich meine hier natürlich
Funktionen…
448 Kapitel 10
Fragen zu Funktionen erster Klasse
function printPassenger(passenger) {
}
processPassengers(passengers, printPassenger);
Jetzt sind Sie wieder dran. Schreiben Sie eine Funktion, die den Namen eines Passagiers
auf der Konsole ausgibt und uns mitteilt, ob er bezahlt hat. Um die Funktion zu testen,
übergeben Sie Ihre Funktion an processPassengers. Überprüfen Sie Ihre Lösung am Ende
des Kapitels, bevor Sie weiterlesen.
F:
Könnten wir diesen ganzen Code nicht einfach in
processPassengers packen? Wir könnten alle nötigen Tests
in einem Schleifendurchlauf durchführen und so sämtliche
Überprüfungen und Ausgaben in einem erledigen. Wäre das
nicht noch effizienter?
A:
Wenn Ihr Code kurz und einfach ist, wäre das tatsächlich ein
sinnvoller Ansatz. Hier geht es uns aber vor allem um Flexibilität.
Was ist, wenn Sie in Zukunft weitere Tests einbauen müssen (haben
alle ihre Laptops ausgeschaltet?) oder sich die Anforderungen
an die bestehenden Tests ändern oder die zugrunde liegende
Datenstruktur angepasst werden muss? Dieses Design reduziert die
Grundkomplexität und ist weniger fehleranfällig, falls Änderungen
oder Erweiterungen vorgenommen werden müssen.
F: Was genau wird übergeben, wenn wir eine Funktion an
eine andere weiterreichen?
A:
Wir übergeben eine Referenz auf die Funktion. Stellen Sie
sich die Referenz wie einen Zeiger auf die interne Darstellung der
eigentlichen Funktion vor. Die Referenz selbst kann in einer Variablen
gespeichert, anderen Variablen zugewiesen oder als Argument an
eine Funktion übergeben werden. Stellen Sie der Funktionsreferenz
runde Klammern nach, wird die Funktion aufgerufen.
Schreiben Sie hier
Ihren Code hin.
Wenn Sie die Funktion
an processPassengers
übergeben, sollte Ihr
Code die Passagierliste
ausgeben.
Übung
Es gibt keine
Dummen Fragen
Sie sind hier 449
Funktionen erster Klasse
function fun(echo) {
console.log(echo);
}
function fun(echo) {
console.log(echo);
};
Unten haben wir eine Funktion erstellt und sie der Variablen fun zugewiesen.
Gehen Sie diesen Code durch und schreiben Sie die Ausgaben hier auf.
Probieren Sie es erst mal im Kopf, bevor Sie es mit dem Computer versuchen.
fun("Hallo");
function boo(aFunction) {
aFunction("buh");
}
boo(fun);
console.log(fun);
fun(boo);
var moreFun = fun;
moreFun("Schon wieder hallo");
function echoMaker() {
return fun;
}
var bigFun = echoMaker();
bigFun("Gibt es hier ein Echo?");
Superwichtig: Überprüfen und verstehen Sie die Antworten, bevor Sie weiterlesen.
Extrapunkte!
(Eine kleine
Vorschau auf die
Dinge, die noch
kommen werden!)
fun
Spitzen Sie Ihren Bleistift

Get JavaScript-Programmierung von Kopf bis Fuß now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.