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 ifinstrukcja 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.
Linia 1. jeśli te warunki są spełnione otwórz nawias okrągły warunek podkreślnik 1 przecinek warunek podkreślnik 2 przecinek kropka kropka kropka zamknij nawias okrągły.
Linia 2. otwórz nawias klamrowy.
Linia 3. minus zamknij nawias ostrokątny Wykonaj te operacje.
Linia 4. zamknij nawias klamrowy.
Linia 5. a jeśli nie są spełnione.
Linia 6. otwórz nawias klamrowy.
Linia 7. minus zamknij nawias ostrokątny Wykonaj te operacje.
Linia 8. zamknij nawias klamrowy.
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++:
Linia 1. if otwórz nawias okrągły warunek podkreślnik 1 przecinek warunek podkreślnik 2 przecinek kropka kropka kropka zamknij nawias okrągły.
Linia 2. otwórz nawias klamrowy.
Linia 3. prawy ukośnik prawy ukośnik Operacje wykonywane przecinek jeśli warunki są spełnione.
Linia 4. zamknij nawias klamrowy.
Linia 5. else.
Linia 6. otwórz nawias klamrowy.
Linia 7. prawy ukośnik prawy ukośnik Operacje wykonywane przecinek jeśli warunki nie są spełnione.
Linia 8. zamknij nawias klamrowy.
Instrukcja warunkowa if napisana w języku Java:
Linia 1. if otwórz nawias okrągły warunek podkreślnik 1 przecinek warunek podkreślnik 2 przecinek kropka kropka kropka zamknij nawias okrągły.
Linia 2. otwórz nawias klamrowy.
Linia 3. prawy ukośnik prawy ukośnik Operacje wykonywane przecinek jeśli warunki są spełnione.
Linia 4. zamknij nawias klamrowy.
Linia 5. else.
Linia 6. otwórz nawias klamrowy.
Linia 7. prawy ukośnik prawy ukośnik Operacje wykonywane przecinek jeśli warunki nie są spełnione.
Linia 8. zamknij nawias klamrowy.
Instrukcja warunkowa if napisana w języku JavaScript:
Linia 1. if otwórz nawias okrągły warunek podkreślnik 1 przecinek warunek podkreślnik 2 przecinek kropka kropka kropka zamknij nawias okrągły.
Linia 2. otwórz nawias klamrowy.
Linia 3. prawy ukośnik prawy ukośnik Operacje wykonywane przecinek jeśli warunki są spełnione.
Linia 4. zamknij nawias klamrowy.
Linia 5. else.
Linia 6. otwórz nawias klamrowy.
Linia 7. prawy ukośnik prawy ukośnik Operacje wykonywane przecinek jeśli warunki nie są spełnione.
Linia 8. zamknij nawias klamrowy.
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.
Ważne!
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ć tylkowtedy, 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 instrukcjiinstrukcja zagnieżdżonazagnieżdżeniem instrukcji.
Linia 1. jeśli te warunki są spełnione otwórz nawias okrągły warunek podkreślnik 1 przecinek warunek podkreślnik 2 przecinek kropka kropka kropka zamknij nawias okrągły.
Linia 2. otwórz nawias klamrowy.
Linia 3. jeśli kolejne warunki są spełnione otwórz nawias okrągły warunek podkreślnik 3 przecinek warunek podkreślnik 4 przecinek kropka kropka kropka zamknij nawias okrągły.
Linia 4. otwórz nawias klamrowy.
Linia 5. minus zamknij nawias ostrokątny Wykonaj te operacje.
Linia 6. zamknij nawias klamrowy.
Linia 7. zamknij nawias klamrowy.
Linia 8. a jeśli nie są spełnione.
Linia 9. otwórz nawias klamrowy.
Linia 10. minus zamknij nawias ostrokątny Wykonaj te operacje.
Linia 12. jeśli kolejne warunki są spełnione otwórz nawias okrągły warunek podkreślnik 5 przecinek warunek podkreślnik 6 przecinek kropka kropka kropka zamknij nawias okrągły.
Linia 13. otwórz nawias klamrowy.
Linia 14. minus zamknij nawias ostrokątny Wykonaj te operacje.
Linia 15. zamknij nawias klamrowy.
Linia 16. zamknij nawias klamrowy.
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?
Linia 1. jeśli te warunki są spełnione otwórz nawias okrągły cudzysłów klient posiada kartę stałego klienta cudzysłów zamknij nawias okrągły.
Linia 2. otwórz nawias klamrowy.
Linia 4. zamknij nawias klamrowy.
Linia 5. jeśli te warunki nie są spełnione.
Linia 6. otwórz nawias klamrowy.
Linia 8. zamknij nawias klamrowy.
Jeśli tak, możemy kontynuować sprawdzanie kolejnych warunków, jeśli nie, wypisujemy komunikat o niespełnieniu warunku.
Linia 1. jeśli te warunki są spełnione otwórz nawias okrągły cudzysłów klient posiada kartę stałego klienta cudzysłów zamknij nawias okrągły.
Linia 2. otwórz nawias klamrowy.
Linia 3. jeśli te warunki są spełnione otwórz nawias okrągły cudzysłów wartość zakupów klienta przekracza 500 zł cudzysłów zamknij nawias okrągły.
Linia 4. otwórz nawias klamrowy.
Linia 6. zamknij nawias klamrowy.
Linia 7. jeśli te warunki nie są spełnione.
Linia 8. otwórz nawias klamrowy.
Linia 10. zamknij nawias klamrowy.
Linia 11. zamknij nawias klamrowy.
Linia 12. jeśli te warunki nie są spełnione.
Linia 13. otwórz nawias klamrowy.
Linia 14. Niestety nie posiadasz karty stałego klienta kropka.
Linia 15. zamknij nawias klamrowy.
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.
Linia 1. jeśli te warunki są spełnione otwórz nawias okrągły cudzysłów klient posiada kartę stałego klienta cudzysłów zamknij nawias okrągły.
Linia 2. otwórz nawias klamrowy.
Linia 3. jeśli te warunki są spełnione otwórz nawias okrągły cudzysłów wartość zakupów klienta przekracza 500 zł cudzysłów zamknij nawias okrągły.
Linia 4. otwórz nawias klamrowy.
Linia 5. Gratulacje przecinek dostałeś rabat 10 procent na zakupy kropka.
Linia 6. zamknij nawias klamrowy.
Linia 7. jeśli te warunki nie są spełnione.
Linia 8. otwórz nawias klamrowy.
Linia 9. Niestety wartość Twoich zakupów nie przekracza 500 zł kropka.
Linia 10. zamknij nawias klamrowy.
Linia 11. zamknij nawias klamrowy.
Linia 12. jeśli te warunki nie są spełnione.
Linia 13. otwórz nawias klamrowy.
Linia 14. Niestety nie posiadasz karty stałego klienta kropka.
Linia 15. zamknij nawias klamrowy.
Łą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:
RWbGhZMBt1Saf
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:
R95ObpM5eVe6E
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 ==.
R1kFXOnJD4rFW
Jeśli liczba jest parzysta, to wyświetlamy ją na ekranie i sprawdzamy kolejną liczbę.
R15R4WhsE2XWV
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.
R171ePdKH6aY9
W ten oto sposób udało się nam stworzyć prosty algorytm wykorzystujący instrukcje warunkowe.
Słownik
instrukcja warunkowa if
instrukcja warunkowa if
podstawowa instrukcja sprawdzająca dowolną liczbę warunków, zwracająca wynik TRUE (prawda) lub FALSE (fałsz)
instrukcja zagnieżdżona
instrukcja zagnieżdżona
instrukcja podrzędna znajdująca się wewnątrz podobnej instrukcji macierzystej