I_P_W13_M04_Java Algorytmy z warunkami w języku Java
Do czego służą instrukcje warunkowe?
Programy cały czas podejmują jakieś decyzje, w jaki sposób to robią?
My, podejmując decyzje, kierujemy się emocjami i rozumem – programy wykorzystują instrukcje warunkowe. Są to elementy w programowaniu, które mają za zadanie sprawdzić, czy podany warunek lub warunki zostały spełnione oraz odpowiednio na to zareagować.
Oto kilka przykładów sytuacji, w których wykorzystywane są instrukcje warunkowe:
Sprawdzenie, czy podany login i hasło się zgadzają.
Zablokowanie dostępu do zawartości PREMIUM, jeśli subskrypcja wygasła.
Wysłanie powiadomienia, jeśli na konto bankowe przyszedł przelew.
Sprawdzenie daty ważności ubezpieczenia.
Przyznawanie rabatów podczas zakupów.
Wysyłanie newsletterów.
Jak zbudowana jest instrukcja warunkowa?
Najpopularniejszą instrukcją warunkową jest tzw. instrukcja warunkowa if, która jest zbudowana z 3 elementów:
Sprawdzenie określonych warunków.
Reakcja, jeśli warunki są spełnione.
(opcjonalnie) Reakcja, jeśli warunki nie zostały spełnione.
W wielu językach programowania instrukcja warunkowa wygląda podobnie. Dlatego tak ważne jest, by wiedzieć, do czego się jej używa i jak jest zbudowana. Oto przykłady tej samej instrukcji warunkowej napisanej w 3 różnych językach:
Instrukcja warunkowa if napisana w języku C++:
Instrukcja warunkowa if napisana w języku Java:
Instrukcja warunkowa if napisana w języku JavaScript:
Wszystkie powyższe implementacje instrukcji if są identyczne. Potwierdza to fakt, że instrukcja if w wielu językach wygląda i działa podobnie lub tak samo.
Powyższe fragmenty kodów nie będą działać prawidłowo, ponieważ zawierają pewne uproszczenie: instrukcje warunkowe oddzielone zostały znakiem przecinka. Na przyszłych lekcjach poznasz tzw. operatory logiczne, które zastąpią wyżej użyte znaki przecinka.
Czym jest zagnieżdżanie warunków?
Bardzo często okazuje się, że po sprawdzeniu jednego warunku trzeba sprawdzić jeszcze kolejne. Co więcej, bardzo często należy to zrobić tylko wtedy, gdy poprzednie warunki zostały spełnione. Zachodzi pytanie: jak to zrobić?
Odpowiedź jest prosta: można ponownie użyć kolejnej instrukcji warunkowej (wewnątrz poprzedniej). Taki mechanizm nazywa się zagnieżdżeniem instrukcji.
Przyjrzyjmy się temu na przykładzie: chcemy napisać instrukcję warunkową, która sprawdzi, czy danemu klientowi przysługuje zniżka 10% na zakupy. Kupujący otrzymuje ją, jeśli posiada kartę stałego klienta oraz wartość jego zakupów przekracza 500 zł.
Najpierw sprawdźmy pierwszy warunek -> czy kupujący posiada kartę stałego klienta?
Jeśli tak, możemy kontynuować sprawdzanie kolejnych warunków, jeśli nie, wypisujemy komunikat o niespełnieniu warunku.
Skoro klient posiada kartę stałego klienta, można sprawdzić kolejny warunek -> czy wartość zakupów przekroczyła 500 zł?
Jeśli nie, wyświetlmy komunikat o niespełnieniu warunku, a jeśli tak, to wyświetlmy komunikat o przyznanym rabacie.
Łączenie instrukcji warunkowych z innymi elementami programowania
Prawdziwy potencjał sprawdzania warunków ujawnia się, gdy łączy się je z innymi elementami programowania, np. iteracją. Omówmy przykład wypisania wszystkich liczb parzystych z zakresu 1, 2, ..., 10.
Zastanówmy się, jaki warunek musi być spełniony, aby liczba była parzysta? Oczywiście musi się dzielić przez 2, ale jak to zapisać? Pomyśl nad tym, zaraz do tego wrócimy. Najpierw zacznijmy budować schemat blokowy.
Tworzymy zmienną, która przechowa nam sprawdzaną liczbę. Skoro zaczynamy od 1, to przypisujemy zmiennej liczba wartość 1:

Potem kontrolujemy, czy sprawdzana liczba nie przekroczyła wartości 10 (sprawdzamy liczby z zakresu od 1 do 10) – jeśli tak, to kończymy algorytm:

W przeciwnym wypadku kontrolujemy, czy wartość zmiennej liczba jest podzielna przez 2. Wystarczy sprawdzić, czy reszta z dzielenia danej liczby przez 2 wynosi 0 (to warunek parzystości). Służy do tego operator %, który oznacza resztę z dzielenia (w naszym przypadku to liczba % 2), a operatorem porównania jest symbol ==.

Jeśli liczba jest parzysta, to wyświetlamy ją na ekranie i sprawdzamy kolejną liczbę.

Pozostało nam jedynie poprowadzić z drugiej instrukcji warunkowej, która sprawdza podzielność sprawdzanej liczby przez 2, strzałkę oznaczającą działanie algorytmu, jeżeli liczba nie będzie podzielna przez 2.

W ten oto sposób udało się nam stworzyć prosty algorytm wykorzystujący instrukcje warunkowe.
Słownik
ififpodstawowa instrukcja sprawdzająca dowolną liczbę warunków, zwracająca wynik TRUE (prawda) lub FALSE (fałsz)
instrukcja podrzędna znajdująca się wewnątrz podobnej instrukcji macierzystej