452 Kapitel 10
Den Code zur Überprüfung der Passagiere organisieren
Der Flugbegleiter-Code zur Getränkebestellung: ein neuer Ansatz
Unser erster Versuch war schon nicht schlecht. Aber wie Sie sehen, kann es zu Problemen kommen, wenn
der Code für die Getränkebestellung mit der Zeit komplexer wird. Wir wollen ihn daher ein wenig umbauen,
indem wir die Situation etwas anders angehen. Dafür platzieren wir die Logik für die Bestellungen in einer
separaten Funktion. Hierdurch können wir die gesamte Logik an einem Ort zusammenfassen, den wir leicht
wiederfinden, wenn der Code für die Getränkebestellung einmal erweitert werden muss.
function createDrinkOrder(passenger) {
if (passenger.ticket === "Erste Klasse") {
alert("Möchten Sie einen Cocktail oder Wein?");
} else {
alert("Sie haben die Wahl zwischen Cola und Wasser.");
}
}
Und die gesamte Logik für die
Getränkebestellung kommt hierhin.
Und die eingebettete Logik
ersetzen wir mit einem Aufruf
von createDrinkOrder.
Wenn ein einzelner Funktionsaufruf die eingebettete Logik zur Getränkebestellung ersetzt, ist
das mit Sicherheit besser lesbar. Außerdem befindet sich die gesamte Logik für die Getränke-
bestellung jetzt bequemerweise an einem leicht zu findenden Ort. Aber warten Sie noch einen
Moment, bevor Sie diesen Code testen. Wir haben gerade von einem weiteren Problem gehört.
Jetzt wird unsere Logik
für die Getränkebestel-
lung nicht mehr länger
von diesem Code ver-
schmutzt.
Hier erzeugen wir eine neue Funktion namens
createDrinkOrder. Ihr übergeben wir einen
Passagier.
Nun können wir die Funktion serveCustomer noch einmal betrachten, und die Logik für
die Getränkebestellung daraus entfernen und sie durch einen Aufruf dieser neuen Funktion
ersetzen.
function serveCustomer(passenger) {
if (passenger.ticket === "Erste Klasse") {
alert("Möchten Sie einen Cocktail oder Wein?");
} else {
alert("Sie haben die Wahl zwischen Cola und Wasser.");
}
createDrinkOrder(passenger);
// Essensbestellung aufnehmen
// Abfall einsammeln
}
Wir entfernen die Logik
aus serveCustomer …
Wir übergeben der Funktion
createDrinkOrder den Passagier,
der zuvor an serveCustomer
übergeben wurde.
Sie sind hier 453
Funktionen erster Klasse
function serveCustomer(passenger) {
createDrinkOrder(passenger);
// Essensbestellung aufnehmen
createDrinkOrder(passenger);
createDrinkOrder(passenger);
// Film zeigen
createDrinkOrder(passenger);
// Abfall einsammeln
}
Wir haben den Code aktualisiert,
damit er berücksichtigt, dass
createDrinkOrder während des
Flugs sehr häufig aufgerufen wird.
Einerseits haben wir unseren Code gut aufgebaut, denn das Hinzufügen zu-
sätzlicher Aufrufe von createDrinkOrder funktioniert recht unkompliziert.
Andererseits berechnen wir bei jeder Bestellung unnötigerweise erneut, welche
Art von Passagier wir vor uns haben.
»Aber das sind doch nur ein paar Zeilen Code«, sagen Sie? Sicher, aber dies ist
auch nur ein einfaches Beispiel in einem Buch. In der wirklichen Welt müssen
Sie die Art des Tickets womöglich über ein Mobilgerät von einem Webservice
abfragen. Das kann schnell viel Zeit und Geld kosten.
Keine Sorge, denn gerade kam eine Funktion erster Klasse auf einem weißen
Ross um die Ecke geritten, um uns zu retten. Mit der Möglichkeit, Funktionen
aus Funktionen zurückzugeben, können wir auch dieses Problem lösen.
Moment! Wir brauchen mehr Getränke.
Alles anhalten! Wir haben gerade erfahren, dass eine Getränke-
bestellung pro Flug nicht ausreicht. Die Flugbegleiter sind der
Meinung, dass eine typische Getränkebestellung eher so aussieht:
Also wirklich, Leute. Nur
ein Getränk? Wir sind
doch kein Billigflieger!
Was tut dieser Code Ihrer Meinung nach? Können Sie sich
mögliche Anwendungsbeispiele vorstellen?
function addN(n) {
var adder = function(x) {
return n + x;
};
return adder;
}
Antworten
kommen hierhin.
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.