Instrukcja
switch jest kolejną instrukcją warunkową, jaką mamy do dyspozycji Javie.
Używamy tej instrukcji jeśli chcemy porównać zmienną warunkową ze zdefiniowanymi wartościami i na podstawie
takiego porównania wykonać określony blok kodu.
Instrukcja
switch działa przede wszystkim ze zmiennymi typu byte, short, int, long,
a także z nieopisywanymi przez nas jeszcze typami enum, String oraz liczbowymi typami obiektowymi.
Skupmy się jednak na typach prostych. Wrócimy do tematu enumów i typów obiektowych dopiero po ich omówieniu w osobnym rozdziale.
Przed Javą 12
W tym paragrafie przedstawiamy instrukcję
switch w postaci w jakiej istniała ona do czasu pojawienia się Javy 12.
Przez wiele lat instrukcja ta wygladała w ten sposób:
Jak to działa:
-
Możemy określić od 1 do n przypadków case, jakie ma sprawdzić instrukcja switch.
-
Wartość case musi być stała lub literana. Nie możemy używać zmiennych.
-
Wszystkie wartości case muszą byc unikalne. W przypadku zduplikowanej wartości Java
zgłosi błąd podczas kompilacji.
-
Każda instrukcja case może (ale nie musi) mieć instrukcję break. Jest ona opcjonalna.
Gdy Java natrafi na instrukcję break, zakończy wykonanie instrukcji switch.
Jeśli instrukcja break nie zostanie znaleziona, sprawadzany jest następny przypadek (następny case).
Ciekawostka. To, że instrukcja break jest opcjonalna powoduje, że dosyć często zdarza się - szczególnie mniej doświadczonym programistom -
pominąć ją przypadkowo. Doprowadza to do sytuacji, w której nie tylko wykonywany jest blok kodu, gdzie zmienna warunkowa jest równa wartości case,
ale też następnego bloku i kolejnego (itd.), aż do momentu odnalezienia instrukcji break lub zakończenia instrukcji switch.
Powoduje to powstawanie trudnych do odnalezienia, frustrujących błędów.
-
Jeśli żaden z przypadków nie zostanie wykonany (żadna wartość case nie będzie równa zmiennej warunkowej), wówczas
zostanie wykonany blok default.
Tradycyjnie przechodzimy do omówienia przykładu:
Zmienna
numberOfItems ma wartość 50.
Wartość tę podajemy na wejściu do instrukcji
switch. Program sprawdza poszczególne przypadki:
- Sprawdzane jest czy numberOfItems jest równe 0. Nie jest, więc program przechodzi dalej.
- Sprawdzane jest czy numberOfItems jest równe 10. Nie jest, więc program przechodzi dalej.
- Sprawdzane jest czy numberOfItems jest równe 50. Zgadza się. To jest właśnie wartość naszej zmiennej. Następuje zakończenie instrukcji switch.
A teraz zobaczmy przykład gdzie żadna z wartości nie pasuje:
Zmienna
numberOfItems ma wartość 15.
Wartość tę podajemy na wejściu do instrukcji
switch. Program sprawdza poszczególne przypadki:
- Sprawdzane jest czy numberOfItems jest równe 0. Nie jest, więc program przechodzi dalej.
- Sprawdzane jest czy numberOfItems jest równe 10. Nie jest, więc program przechodzi dalej.
- Sprawdzane jest czy numberOfItems jest równe 50. Nie jest, więc program przechodzi dalej.
- Sprawdzane jest czy numberOfItems jest równe 103. Nie jest, więc program przechodzi dalej.
- Wyczerpane zostały wszystkie przewidywane przypadki i instrukcja kończy się wykonując kod w bloku default.
Przykład w programie
Teraz zobaczmy jak poprzedni przykład (ze zgodną wartością 50) będzie wyglądał po wpięciu go do naszego programu wprowadzonego w rozdziale
Hello JavAPPa:
[Film bez dźwięku] [720p]
Od Javy 12
Począwszy od Javy 12 oprócz instrukcji
switch zostały wprowadzone wyrażenia
switch (w 12-ce dostępne w trybie
preview).
Finalna wersja wyrażeń (bez trybu
preview) została udostępniona w najświeższej wersji Javy, w Javie 14.
W kursie
Kursu Javy 8 do 17
zawarliśmy kilka przykładów tego rozwiązania. Trzeba przyznać, że jest ono bardzo wygodne, ponieważ upraszcza kod i cechuje się większą
elastycznością.
Linki:
https://www.w3schools.com/java/java_switch.asp
Masz pytanie dotyczące prezentowanego materiału?
Coś jest dla Ciebie niejasne i Twoje wątpliwości przeszkadzają Ci w pełnym zrozumieniu treści?
Napisz do nas maila, a my chętnie znajdziemy odpowiednie rozwiązanie.
Najciekawsze pytania wraz z odpowiedziami będziemy publikować pod rozdziałem.
Nie czekaj. Naucz się programować jeszcze lepiej.