KWALIFIKACJA INF3 - CZERWIEC 2021

PYTANIE NR 4.
Wskaż instrukcję równoważną do instrukcji switch zapisanej językiem PHP.
Ilustracja przedstawia fragment kodu w języku PHP, który jest częścią pytania egzaminacyjnego dotyczącego kwalifikacji
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Instrukcja switch można zapisać równoważnie jako łańcuch if/elseif/else, w którym każdy case odpowiada osobnemu warunkowi, a default gałęzi else. Kluczowe jest też uwzględnienie przerwania wykonania (odpowiednik break), aby nie "przechodzić" do kolejnych gałęzi.

Pełne wyjaśnienie:

W PHP instrukcja switch służy do wyboru jednej z wielu gałęzi wykonania na podstawie wartości wyrażenia. Typowy zapis zawiera:

  • case – kolejne porównania wartości,
  • default – gałąź domyślna, gdy żaden przypadek nie pasuje,
  • break – zakończenie wykonywania danego przypadku (bez tego może wystąpić tzw. "przejście" do następnego przypadku).

Równoważną konstrukcją (w sensie zachowania programu) jest zwykle łańcuch if/elseif/else, gdzie:

  • każdy case odwzorowuje się na osobny warunek w if lub elseif,
  • default odwzorowuje się na końcowe else,
  • logika zakończenia gałęzi w switch (np. przez break) odpowiada temu, że po wejściu w blok if/elseif pozostałe warunki nie są już sprawdzane.

Poprawna jest odpowiedź "Instrukcja 2.", ponieważ przedstawia ona właśnie takie odwzorowanie: wszystkie przypadki z switch są pokryte odpowiednimi warunkami, zachowana jest gałąź domyślna oraz nie dochodzi do niezamierzonego wykonania kolejnych bloków (co w switch mogłoby się zdarzyć przy braku break).

Pozostałe propozycje są błędne typowo z jednego z powodów:

  • brak gałęzi odpowiadającej default (zmienia wynik dla wartości nieobsłużonych),
  • zastosowanie innego operatora porównania lub innej kolejności warunków, co może dać różne wyniki dla niektórych danych,
  • odwzorowanie nie uwzględnia efektu break, przez co wykonuje się więcej niż jedna gałąź,
  • częściowe pokrycie przypadków – tylko część case jest odtworzona w if/elseif.

Na egzaminie warto zawsze sprawdzić: czy wszystkie wartości są obsłużone, czy jest gałąź domyślna oraz czy przepływ sterowania jest identyczny (jedna ścieżka wykonania). Jeśli w zadaniu pojawiają się różne typy (np. liczby i napisy), zwróć uwagę, że porównania mogą działać inaczej przy porównaniu nieścisłym i ścisłym.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Równoważność oznacza, że dla tych samych danych wejściowych kod zawsze daje ten sam efekt: wybiera tę samą gałąź, wykonuje te same instrukcje i zwraca te same wartości. Nie chodzi o podobny wygląd, tylko o identyczne działanie programu w każdym przypadku.
Najpierw obliczana jest wartość wyrażenia w switch, potem porównuje się ją z kolejnymi case. Gdy któryś pasuje, wykonywany jest jego blok. Zwykle używa się break, aby zakończyć switch. Gdy nic nie pasuje, wykonuje się default.
Bez break wykonanie może "przelecieć" do następnego case i uruchomić kolejne instrukcje, mimo że nie powinny się wykonać. To częsty błąd: kod działa jak kilka połączonych gałęzi, a nie jak pojedynczy wybór jednej ścieżki.
Każdy case zapisujesz jako osobny warunek: najpierw if, potem elseif dla kolejnych przypadków. default zamieniasz na końcowe else. Upewnij się, że warunki są wzajemnie rozłączne i obejmują wszystkie potrzebne przypadki.
Nie zawsze. W praktyce switch w PHP często zachowuje się jak porównanie nieścisłe, co bywa zaskakujące przy mieszaniu typów (np. liczby i napisy). Na egzaminie sprawdź, czy odpowiednik w if używa zgodnego sposobu porównania, bo to wpływa na równoważność.
Najczęściej: pominięcie gałęzi default, błędne warunki (np. inne porównanie niż w switch), inna kolejność sprawdzania przypadków, oraz nieuwzględnienie efektu break. Wystarczy jeden taki błąd, aby fragmenty kodu nie były równoważne.
Gdy warunki są złożone (np. zakresy liczb, kilka kryteriów naraz, funkcje w warunku) lub gdy zależy Ci na czytelnych wyrażeniach logicznych. switch jest wygodny przy wielu prostych przypadkach opartych o jedną wartość, ale nie zawsze jest najczytelniejszy.
Zwróć uwagę na sytuacje brzegowe: wartość niepasująca do żadnego case, różne typy danych, oraz to, czy wykonuje się dokładnie jedna gałąź. Jeśli w jednym wariancie może uruchomić się dodatkowy blok (np. przez brak break), to nie jest równoważność.
Default nie jest obowiązkowy składniowo, ale ma znaczenie logiczne: określa, co zrobić, gdy żaden przypadek nie pasuje. Przy porównywaniu z wersją if/elseif/else brak odpowiednika default może zmienić działanie programu dla wartości spoza listy case.
Ćwicz na krótkich przykładach: dopisz ręcznie wersję if/elseif/else do kilku switchy i sprawdzaj wyniki dla różnych danych. Szczególnie testuj przypadki bez dopasowania oraz mieszanie typów. Pomaga też dopisywanie komentarzy "co odpowiada czemu": case → elseif, default → else.
info

Statystycznie 42% uczniów zna prawidłową odpowiedź. trudne

Eksperci podkreślają: "Instrukcja switch można zapisać równoważnie jako łańcuch if/elseif/else, w którym każdy case odpowiada osobnemu warunkowi, a default gałęzi else."

Źródła:

  • PHP Manual: switch - https://www.php.net/manual/en/control-structures.switch.php - accessed 2026-03-04
  • PHP Manual: if - https://www.php.net/manual/en/control-structures.if.php - accessed 2026-03-04
  • PHP Manual: Comparison Operators - https://www.php.net/manual/en/language.operators.comparison.php - accessed 2026-03-04

Materiały:

  • Dokumentacja PHP: instrukcja switch (php.net)
  • Dokumentacja PHP: instrukcja if/elseif/else (php.net)
  • Dokumentacja PHP: operatory porównania i różnice == vs === (php.net)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego