Pytanie 1
Wskaż kod, który jest funkcjonalnie równoważny zaprezentowanemu poniżej:
switch(nrTel) { case 999: opis = "Pogotowie"; break; case 998: opis = "Straż"; break; case 997: opis = "Policja"; break; default: opis = "Inny numer"; } | |
Kod 1.with nrTel { if (999) opis = "Pogotowie"; if (998) opis = "Straż"; if (997) opis = "Policja"; else opis = "Inny numer"; } | Kod 2.if (nrTel == 999) opis = "Pogotowie"; else if (nrTel == 998) opis = "Straż"; else if (nrTel == 997) opis = "Policja"; else opis = "Inny numer"; |
Kod 3.if (nrTel == 999) opis = "Pogotowie"; if (nrTel == 998) opis = "Straż"; if (nrTel == 997) opis = "Policja"; else opis = "Inny numer"; | Kod 4.Opis = if (nrTel == 999) => "Pogotowie"; else if (nrTel == 998) => "Straż"; else if (nrTel == 997) => "Policja"; else => "Inny numer"; |
Brak odpowiedzi na to pytanie.
W tym przypadku Kod 2 jest dokładnym odpowiednikiem funkcjonalnym dla przedstawionej instrukcji switch. To, co tu widać, to klasyczna zamiana konstrukcji switch-case na strukturę if-else if-else, co jest bardzo częstą praktyką w programowaniu, szczególnie w językach, które nie zawsze posiadają rozbudowaną wersję switch. Kod 2 najpierw sprawdza, czy nrTel to 999, jeśli tak – przypisuje "Pogotowie" i nie sprawdza dalszych warunków. Jeśli nie, przechodzi do kolejnego warunku, czyli nrTel == 998, potem 997, w końcu domyślnie daje "Inny numer". Dokładnie tak samo to działało w switchu – tylko jeden warunek się wykonuje i reszta jest ignorowana, co ma znaczenie np. gdybyśmy później rozbudowywali logikę. Takie podejście jest czytelne, uniwersalne i zgodne z dobrymi praktykami kodowania – łatwo to refaktoryzować, debugować i utrzymywać. W wielu firmowych projektach spotkałem się z preferencją dla if-else zamiast switcha, jeśli liczba przypadków nie jest ogromna, bo łatwiej potem dołożyć dodatkowe warunki (np. złożone, nie tylko proste porównanie wartości). Fajnie też wiedzieć, że takie zamiany to podstawa przy migracji kodu między różnymi językami – nie każdy język ma identycznie działający switch. Moim zdaniem, umiejętność takiego przełożenia to dobra baza do nauki algorytmiki i lepszego rozumienia logiki sterowania przepływem kodu.

