Luty 20, 2018

Instrukcje warunkowe – Java

Instrukcje warunkowe java

Instrukcje warunkowe java są koniecznością do programowania. Poznanie ich nie jest trudne, dlatego poświęć chwilę i poznaj jak sterować działaniem swojej aplikacji.

Instrukcje warunkowe

Co to instrukcje warunke,  tak dosyć teoretycznie, ponieważ do ich implementacji będą nam potrzebne nam operatory logiczne, o których powiem później.

Do czego więc służą instrukcję warunkowe? Służą one do wyszczególniania przypadków zależnie od aktualnego stanu. Znaczy to tyle, że możemy wykonać daną czynność tylko gdy jakiś stan jest prawdą.

Wymyślmy może krótki przykład, przypuśćmy, że mamy program, który odczytuje liczby od użytkownika i dzieli je. Jak możemy tutaj zastosować instrukcję warunkowe? A no sprawdzić czy dzielnik jest różny od 0. W końcu może nam się trafić złośliwy użytkownik, który chce popsuć naszą aplikację.

if

Najbardziej chyba popularną instrukcją warunkową jest instrukcja if. Jest bardzo prosta w użyciu, gdy warunek jest prawdziwy to wykonaj daną czynność. Kod przykładowej implementacji wygląda tak:

package com.company;

public class Main {

    public static void main(String[] args) {

        if(true){
            System.out.println("Warunek spełniony!");
        }
        
    }
}

Czyli jeżeli warunek w nawiasach jest prawdziwy (oczywiście w tym przypadku zawsze się wyświetli napis na konsolę) to wykonaj daną akcję. Wkrótce będziemy tworzyć bardziej skomplikowane warunki, gdy tylko poznamy operatory logiczne.

else

Do instrukcji if, możemy również dołączyć instrukcję else, która oznacza w innymi wypadku wykonaj toCzyli jeżeli nasz warunek nie jest spełniony to kompilator wykonuje kod z bloku else.

package com.company;

public class Main {

    public static void main(String[] args) {

        if(false) {
            System.out.println("Warunek spełniony!");
        }else{
            System.out.println("Jestem w bloku else!");
        }

    }
}

No i w tym przypadku w konsoli zobaczymy napis „Jestem w bloku else!”, ponieważ warunek nie został spełniony (false to fałsz, więc nie otrzymujemy prawdy :P) to kierujemy się do bloku else.

else if

Dodatkowo przy użyciu instrukcji if możemy używać również instrukcji else if, tzn. możemy wyróżnić kolejny warunek, który będzie sprawdzony, gdy nie zostanie spełniony warunek if. Przykładowy kod:

package com.company;

public class Main {

    public static void main(String[] args) {

        if(warunek_1) {
            System.out.println("Warunek 1 spełniony!");
        }else if(warunek_2){
            System.out.println("Warunek 2 spełniony!");
        }else{
            System.out.println("Żaden warunek nie spełniony!");
        }

    }
}

Else if został dodany do instrukcji if, jednak nie przeszkadza również dodania tutaj instrukcji else, który się wykona gdy żaden warunek nie zostanie spełniony.

switch

Switch z tłumaczenia oznacza przełącznik i w sumie trochę to tak wygląda. Stosuje się go raczej rzadziej, działa on podobnie jak if z wielokrotnymi blokami else if. Jest on jednak czytelniejszy i dlatego czasami stosowany.

package com.company;

public class Main {

    public static void main(String[] args) {

        int x = 10;

        switch(x){

            case 1:
                System.out.print("X równy 1");
                break;
            case 5:
                System.out.print("X równy 5");
                break;
            case 10:
                System.out.print("X równy 10");
                break;
            default:
                System.out.print("Nie rozpoznano wartości!");
                break;

        }

    }
}

Już tłumaczę ten nieco dłuższy kod. W nawiasach przy switch, wpisana tam wartość oznacza, że będziemy sprawdzać porównanie właśnie z tą zmienna tzn. będziemy sprawdzać ile się równa zmienna x. Case oznacza zaś przypadek sprawdzaniaczyli case 1: wykona się gdy zmienna x będzie miała wartość 1 itd.

W nasze oczy rzuca się słowo kluczowe default, oznacza ono tyle samo co else w poprzednim rozdziale. Czyli ten blok wykona się, gdy żaden wcześniejszy blok nie zostanie wykonany.

Zwróć uwage, że każdy blok rozpoczyna się dwukropkiem, a kończy słowem break. Jest to sygnał dla kompilatora, gdzie mieści się dany blok, aby wiedział co wykonać. Bądźmy szalonymi naukowcami i usuńmy słowa break.

package com.company;

public class Main {

    public static void main(String[] args) {

        int x = 10;

        switch(x){

            case 1:
                System.out.print("X równy 1");

            case 5:
                System.out.print("X równy 5");

            case 10:
                System.out.print("X równy 10");

            default:
                System.out.print("Nie rozpoznano wartości!");

        }

    }
}

Tym razem na ekranie pojawił nam się napisac: X równy 10Nie rozpoznano wartości!. Co to oznacza? Kompilator wszedł w blok, który został spełniony (case 10), jednak nie wiedział gdzie się on kończy i wykonał resztę kodu tzn. kod z default, który nie powinien zostać wykonany!

Operator trójargumentowy ?

Czasami dla czytelności stosuje się operator trojargumentowy jako skrócony zapis instrukcji if. Pomaga on pisać krótkie instrukcje warunkowe przez co kod jest czytelniejszy i krótszy. Tak wygląda jego teoretyczny zapis:

(warunek) ? (co się ma wykonać gdy prawda) : (co ma się wykonać gdy fałsz)

Zapiszmy sobie, więc przykładową implementację tego operatora:

package com.company;

public class Main {

    public static void main(String[] args) {

        System.out.println( (true) ? "Prawda!" : "Fałsz" );

    }
}

Na ekranie pojawi się nam oczywiście napis „Prawda!”, ponieważ warunek został spełniony. Naprawdę warto stosować taki zapis, gdy tylko jest to możliwe.

Zakończenie

Po dzisiejszej lekcji kursu nie ma przygotowanych zadań, ponieważ aby sprawdzić twoją wiedzę z instrukcji warunkowych potrzebna będzie nam wiedza o operatorach logicznych, które poznasz w następnej lekcji kursu. Zapraszam, więc do rozwiązania zadań z instrukcji warunkowych, które pojawią się pod następną lekcją.

Zachęcam również do komentowania, jeżeli jest dla Ciebie coś nie zrozumiałe lub gdzieś popełniłem błąd.