444 Kapitel 10
Passagiere mit Funktionen überprüfen
Typischerweise schreiben Sie für jede Bedingung eine eigene Funktion: eine zum
Überprüfen der No-Fly-Liste, eine zum Kontrollieren, ob der Passagier bezahlt hat,
und eine, um alle Passagiere auszugeben. Wenn wir uns das anschließend ansehen,
stellen wir fest, dass sich alle Funktionen ziemlich ähnlich sehen, wie hier:
Den Code schreiben, um Passagiere zu verarbeiten
und zu überprüfen
function checkPaid(passengers) {
for (var i = 0; i < passengers.length; i++) {
if (!passengers[i].paid) {
return false;
}
}
return true;
}
function checkNoFly(passengers) {
for (var i = 0; i < passengers.length; i++) {
if (onNoFlyList(passengers[i].name)) {
return false;
}
}
return true;
}
function printPassengers(passengers) {
for (var i = 0; i < passengers.length; i++) {
console.log(passengers[i].name);
return false;
}
return true;
}
Der einzige Unterschied besteht
hier darin, dass zum einen über-
prüft wird, ob bezahlt wurde, und
zum anderen, ob sich der Name auf
der No-Fly-Liste befindet.
Und printPassengers unterscheidet sich nur
dadurch, dass es keinen Test gibt (stattdessen
geben wir die Passagiere auf der Konsole
aus) und wir keinen Rückgabewert brauchen.
Trotzdem iterieren wir über die Passagiere.
Das ist eine Menge doppelter Code: Alle diese Funktionen iterieren über die Passagiere und
führen für jeden Passagier eine Aktion durch. Und was passiert, wenn in Zukunft weitere Tests
nötig werden? Vielleicht muss überprüft werden, ob noch irgendwelche Laptops eingeschaltet
sind oder ob ein Passagier ein Upgrade hat oder Vegetarier ist. Das ist viel redundanter Code.
Noch schlimmer wäre es, wenn die Datenstruktur mit den Passagieren von einem Array mit
Objekten in etwas anderes geändert würde. Dann müssten Sie jede Funktion einzeln öffnen
und neu schreiben. Keine gute Idee.
Dieses kleine Problem lässt sich mit Funktionen erster Klasse lösen. Und zwar so: Wir
schreiben eine Funktion, die weiß, wie sie über die Passagiere iterieren kann, und übergeben
ihr eine zweite Funktion, die weiß, wie die benötigte Überprüfung durchgeführt werden muss
(also zu testen, ob sich der Name auf der No-Fly-Liste befindet, ob ein Passagier bezahlt hat
und so weiter).
Sie sind hier 445
Funktionen erster Klasse
Lassen Sie uns ein paar Vorbereitungen treffen, indem Sie zunächst eine Funktion
schreiben, die einen Passagier als Argument übernimmt und überprüft, ob sich der
Name des Passagiers auf der No-Fly-Liste befindet. Geben Sie in diesem Fall true zurück,
ansonsten false. Schreiben Sie eine weitere Funktion, die einen Passagier übernimmt
und überprüft, ob er bereits bezahlt hat. Geben Sie true zurück, wenn der Passagier
nicht bezahlt hat, ansonsten false. Den Anfang des Codes haben wir unten bereits für Sie
geschrieben. Unsere Lösung finden Sie auf der folgenden Seite, aber nicht abgucken!
Hinweis: Gehen Sie davon aus, dass nur
eine Person auf Ihrer No-Fly-Liste
steht: Dr. Evel.
function checkNoFlyList(passenger) {
}
function checkNotPaid(passenger) {
}
Bevor Sie die erste Funktion an eine andere übergeben, wollen wir
Ihr Hirn ein wenig aufwärmen. Werten Sie den unten stehenden Code
(in Ihrem Kopf) aus und überlegen Sie, was dabei herauskommt.
Überprüfen Sie Ihre Antworten, bevor Sie weiterlesen.
function sayIt(translator) {
var phrase = translator("Hallo");
alert(phrase);
}
function hawaiianTranslator(word) {
if (word === "Hallo") return "Aloha";
if (word === "Auf Wiedersehen") return
"Aloha";
}
sayIt(hawaiianTranslator);
Übung
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.