jesteś tutaj
479
Funkcje pierwszej klasy
JazdaLot próbnay
Przetestujmy ten nowy kod. Musimy napisać krótki kod, który kolejno
pobierze każdego pasażera z listy, a następnie wywoła funkcję
serveCustomer
i przekaże do niej obiekt tego pasażera. Kiedy już dodasz ten kod do strony,
wyświetl ją w przeglądarce i obsłuż pasażerów.
function servePassengers(passengers) {
for (var i = 0; i < passengers.length; i++) {
serveCustomer(passengers[i]);
}
}
servePassengers(passengers);
Kod tej funkcji jedynie pobiera każdego
pasażera z tablicy passengers i przekazuje
go w wywołaniu funkcji serveCustomer.
Oczywiście, aby przetestować nasze rozwiązanie,
musimy także wywołać nową funkcję
servePassengers. (Przygotuj się na całkiem
sporo okien dialogowych z komunikatami!).
P
: Chciałbym się upewnić, że
dobrze rozumiem… Wywołując
createDrinkOrder
, uzyskujemy
funkcję, którą musimy wywołać,
żeby przyjąć zamówienie na napoje?
O
:
Dokładnie tak. Najpierw wywołujemy
createDrinkOrder, by pobrać funkcję
getDrinkOrderFunction, która wie,
co można zaoferować pasażerowi, a
następnie wywołujemy ją za każdym razem,
gdy chcemy zaproponować pasażerowi
jakiś napój. Zwróć uwagę, że funkcja
getDrinkOrderFunction jest znacznie
prostsza niż createDrinkOrder: jej
działanie sprowadza się do wyświetlenia
okna dialogowego z oferowanymi napojami.
P
: A skąd funkcja
getDrinkOrder
wie, jakie komunikaty wyświetlić?
O
:
Gdyż tworzymy ją specjalnie dla danego
pasażera, na podstawie jego biletu. Przyjrzyj
się jeszcze raz funkcji createDrinkOrder.
Zwracana funkcja odpowiada typowi
biletu pasażera: jeśli kupił on bilet pierwszej
klasy, funkcja getDrinkOrderFunction
zostanie utworzona tak, by oferować
napoje dostępne w pierwszej klasie. Jeśli
jednak pasażer ma bilet klasy turystycznej,
funkcja getDrinkOrderFunction
zostanie utworzona tak, by oferować napoje
dostępne w tej klasie. Kiedy zwracamy
funkcję dostosowaną do typu biletu danego
pasażera, funkcja ta może być prosta,
szybka i łatwa do wywołania, za każdym
razem gdy trzeba zebrać zamówienie
i wydać pasażerowi napój.
P
: Ten kod obsługuje jednego
pasażera: oferuje mu napój, wyświetla
film itd. Czy stewardesy nie obsługują
zazwyczaj wszystkich pasażerów,
nie wyświetlają tego samego filmu
w całym samolocie itp.?
O
:
Sprawdzaliśmy Cię! I zdałeś. Masz
rację. Nasz kod wywołuje funkcję
serveCustomer dla konkretnego
pasażera. W rzeczywistości wygląda
to trochę inaczej. Jednak to ma być
prosty przykład demonstrujący złożone
zagadnienie (zwracanie funkcji jako
wyniku) i daleko mu do doskonałości.
Ale skoro już
przyznaliśmy się do błędu
,
prosimy o wyjęcie karteczek i…
głupie pytania
Nie istnieją
W jaki sposób zmodyfikowałbyś
ten kod tak, by drinki były
oferowane wszystkim pasażerom
i film wyświetlany w całym
samolocie, bez ciągłego
przetwarzania zamówień
w zależności od typu
posiadanego biletu? Czy użyłbyś
funkcji pierwszej klasy?
WYSIL
SZARE KOMÓRKI
2
480
Rozdział 10.
Ćwiczenie z funkcji pierwszej klasy
Twoim zadaniem jest dodanie do naszego przykładu trzeciej klasy — turystycznej klasy premium,
w skrócie ”premium”. Pasażerowie tej klasy, oprócz coli i wody, mogą także zamówić wino.
Dodatkowo zaimplementuj funkcję getDinnerOrderFunction oferującą następujące menu.
Klas pierwsza: kurczak lub makaron.
Turystyczna klasa premium: przekąska lub talerz serów.
Klasa turystyczna: orzeszki lub precelki.
Sprawdź naszą wersję rozwiązania, przedstawioną pod koniec tego rozdziału.
Nie zapomnij przetestować swojego kodu.
Ćwiczenie
Implementując to rozwiązanie,
koniecznie użyj funkcji pierwszej
klasy!
Get Programowanie w JavaScript Rusz głową! 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.