Dzisiejszy materiał jaki będzie o Javie będzie taką poboczną częścią drugą o instrukcjach warunkowych. Pozwólcie, że przedstawię Wam na czym polega w języku Java instrukcja "switch" nazywana instrukcją wielokrotnego wyboru. Czy jest przydatna? To zależy od kontekstu, aczkolwiek nalegam zobaczyć chociaż samą postać kodu źródłowego, żebyś wiedział(a) na przyszłość 😊.
Tweet |
"SWITCH" W JĘZYKU JAVA ZAPISEM ALTERNATYWNYM DO INSTRUKCJI WARUNKOWYCH
Instrukcja wielokrotnego wyboru jest drugim sposobem na definiowanie wielu przebiegów programu w zależności od wartości zmiennych. Buduje się ją inaczej niż instrukcję warunkową i sposób użycia również odbiega od tradycyjnego. "switch" okaże się bardziej pasujący w momencie sprawdzenia zmiennej pod kątem posiadania jednej z wielu wartości. To niesie za sobą ten minus, że nie będziemy w stanie sprawdzić czy jakaś liczba mieści się w podanym przedziale. Jedynie mamy możliwość zbadania czy liczba równa się N 👎.
ZAPIS KODU ŹRÓDŁOWEGO
"switch" w języku Java ma podobny początek w porównaniu do instrukcji warunkowej. Na początku wstawiamy tytułowe słowo kluczowe i zaraz po nim umieszczamy nazwę zmiennej w środku nawiasów okrągłych:
switch (x) {
}
Ważna uwaga co do typu danych! Tu występuje drugie ograniczenie: instrukcja wielokrotnego wyboru zaakceptuje tylko następujące typy i żadne inne:
- całkowitoliczbowe,
- zmiennoprzecinkowe,
- znakowe,
- łańcuchowe,
- wyliczeniowe.
Każdy inny typ musi już być sprawdzany przy pomocy tej "zwykłej" instrukcji warunkowej albo po zastosowaniu bardziej zaawansowanych praktyk np. polimorfizm dla klas.
Załóżmy, że nasze "x" jest liczbą całkowitą. Załóżmy też, że mamy napisać program wypisujący jaką opcję wybrał użytkownik po wciśnięciu danego klawisza. To wówczas mamy prawo wykorzystać instrukcję "switch" dla zdefiniowania poszczególnych przypadków:
switch (x) {
case 1:
System.out.println("Nowy plik");
// instrukcje utworzenia nowego pliku
break;
case 2:
System.out.println("Otwórz plik");
// instrukcje otwarcia pliku
break;
case 3:
System.out.println("Zapisz plik");
// instrukcje zapisu pliku
break;
case 4:
System.out.println("Wyjście");
// instrukcje zamknięcia programu
break;
default:
System.out.println("Nieznana opcja");
break;
}
"case" jest drugim słowem kluczowym związanym z instrukcją "switch" w języku Java. Za jego pomocą określamy zestaw instrukcji dla jednego przypadku. Jak widać możemy do niego wrzucić tyle instrukcji, ile chcemy. Zwróćcie też uwagę, że każdy "case" zawiera na końcu słowo "break". I tu ciekawostka - ono NIE JEST wymagane, jednak pominięcie go może przynieść konsekwencje! Co gorsza, nie zostaniecie powiadomieni gdyż nie zostanie to potraktowane jako błąd składniowy!!! Zostawimy sobie tę uwagę na sam koniec, a na razie skupmy się na pozostałych rzeczach.
PRZYPADEK DOMYŚLNY
Trzecim słowem kluczowym związanym bezpośrednio z instrukcją "switch" w języku Java jest "default", dla definiowania przypadku, gdy żaden wariant się nie sprawdzi. Jest ono tożsame działaniu słowa "else" w instrukcji warunkowej - to jest dokładnie to samo!
SCALANIE BLOKÓW "CASE"
Nie trzeba programować instrukcji "switch" liniowo, że jeden "case", jeden przypadek. Język Java dopuszcza możliwość łączenia dwóch przypadków z jednym ciągiem instrukcji. Stosujemy wtedy taki zapis:
case 3:
case 4:
// instrukcje dla przypadku, gdy zmienna przyjmie wartość 3 LUB 4
break;
Tych słówek "case" może się znaleźć więcej, jeśli Wasz problem tego wymaga 😉.
PORÓWNANIE Z KLASYCZNĄ INSTRUKCJĄ WARUNKOWĄ
Nie jesteś w stanie nadal pojąć co tu jest grane 🙂? Nie szkodzi, zostawiam poniżej kod źródłowy z instrukcjami warunkowymi, który daje taki sam efekt co powyższe "switch" w języku Java:
if(x == 1) {
System.out.println("Nowy plik");
// instrukcje utworzenia nowego pliku
} else if(x == 2) {
System.out.println("Otwórz plik");
// instrukcje otwarcia pliku
} else if(x == 3) {
System.out.println("Zapisz plik");
// instrukcje zapisu pliku
} else if(x == 4) {
System.out.println("Wyjście");
// instrukcje zamknięcia programu
} else {
System.out.println("Nieznana opcja");
}
A przypadek, gdy wiele bloków "case" odnosi się do tego samego bloku instrukcji to jest nic innego jak alternatywa, czyli jedno lub drugie (albo N-te):
if(x == 3 || x == 4) {
// instrukcje dla przypadku, gdy zmienna przyjmie wartość 3 LUB 4
}
PATRZ, GDZIE "ŁAMIESZ"!
Uczulam Was przed dobrze ukrywającą się pułapką związaną ze słowem kluczowym "break"! Jeżeli nie wstawisz go na samym końcu bloku "case", to w przypadku jego spełnienia wykonają się wszystkie instrukcje zarówno tego, jak i każdego następnego bloku, aż do natrafienia na najbliższe "break"!!! Traktuj słowo "break" jako znak STOP dla programu, żeby wiedział w którym miejscu się zatrzymać z wykonywaniem instrukcji.
Instrukcja "switch" w języku Java jest w stanie jedynie zbadać czy dana zmienna zawiera jakąś KONKRETNĄ wartość spośród podanych.
Krótkie zagadnienie, to i artykuł niezbyt długi 😋. "switch" może się czasem okazać wygodniejsze niż zwykły "if", stąd warto tę konstrukcję znać!