Jason. Cała informatyka w jednym miejscu!

Żeby zbudować nawet prosty program, trzeba koniecznie opanować jeden ważny temat. Jest nim niejaka instrukcja warunkowa, a w języku Java nie różni się praktycznie niczym od większości innych języków programowania 🙂! Serdecznie zapraszam do środka, jeśli się uczysz i nie wiesz o co się rozchodzi 😁!

CO NAM DAJE INSTRUKCJA WARUNKOWA W JĘZYKU JAVA?

W 99% pisanych programów spotkacie się z sytuacją, w której należy "nakierować" program na inne działanie w zależności od czegoś. Na przykład nie powinien próbować dzielić, gdy w mianowniku jest zero. Wtedy trzeba skonstruować warunek, żeby program obliczył iloraz podanych dwóch liczb, lecz tylko wtedy, gdy zmienna reprezentującą drugą liczbę nie jest zerem.

Wtedy służy pomocą instrukcja warunkowa 😄! To jest konstrukcja, która pozwala wykonać pewien ciąg instrukcji tylko po spełnieniu podanego warunku. Żeby z kolei zbudować warunek korzystamy z operatorów relacyjnych bądź funkcji zwracających wartość logiczną.

KONSTRUKCJA W KODZIE ŹRÓDŁOWYM

Instrukcja warunkowa w języku Java, jak wspomniałem, nie różni się niczym od innych znanych języków programowania. Taka sama postać obowiązuje w języku C#, Kotlin, JavaScript i paru innych, więc jest duża szansa, że możesz już kojarzyć ten zapis z innych języków, przynajmniej z widzenia. Tak wygląda budulec:

if([warunek]) {
	
}

Zasady formatowania kodu zalecają, aby klamrę otwierającą umieszczać w tym samym wierszu co słowo kluczowe "if" z warunkiem. Po słowie "if", wstawiamy warunek wewnątrz nawiasów okrągłych i zaraz po tym mają się znaleźć klamerki, a w środku nich umieszczamy instrukcje, które mają się wykonać tylko pod określonym warunkiem. Wróćmy do przykładu z początku artykułu z przypadkiem dzielenia przez zero. Wtedy moglibyśmy zapisać to w taki sposób:

if(b != 0) {
	System.out.println(a + "/" + b + " = " + (a / b));
}

Jeżeli instrukcja warunkowa w języku Java ma w sobie "trzymać" tylko jedną instrukcję, to można opuścić klamerki:

if(b != 0)
	System.out.println(a + "/" + b + " = " + (a / b));

i jedynie zastosować wcięcie tabulatorem (zalecane, ale niewymagane), jednak nadal gorąco zachęcam je stosować, bo podnoszą czytelność kodu. Ponadto nie trzeba będzie ich wstawiać, jeśli się okaże że znajdzie się więcej instrukcji niż jedna 😝.

WHAT "ELSE"?

To nie koniec poznawania wiedzy o instrukcjach warunkowych. Bardzo często będziecie łączyć "if" z kolejnym słowem kluczowym: "else". Są takie przypadki, w których możecie chcieć coś wykonać również w sytuacji, gdy warunek NIE zostanie spełniony. Sięgacie wtedy do słowa "else", tylko już nie wstawiacie żadnego warunku! To działa jak "w przeciwnym wypadku":

if(b != 0) {
	System.out.println(a + "/" + b + " = " + (a / b));
} else {
	System.out.println("Nie dzielimy przez zero!");
}

Powtarzam, że przy użyciu słowa "else", nie wstawiamy żadnego warunku! To zadziała tylko i wyłącznie wtedy, gdy warunek nie zostanie spełniony. W powyższym kodzie oznacza to, że gdy zmienna "b" okaże się równa zero, to zostanie wyświetlony komunikat o niewskazanym dzieleniu przez zero, zamiast próby wyświetlenia wyniku dzielenia.

"ELSE" + "IF" DAJE NAM "ELSE IF"!

Domyślam się, że może chodzić po głowie pytanie "a co, gdybym chciał(a) mieć więcej warunków do sprawdzenia niż jeden?". Nic prostszego - po prostu łączycie oba poznane słówka i wychodzi Wam: "else if"! "else if" oznacza dla programu sprawdzenie nowego warunku w momencie, gdy nie zostanie spełniony ten pierwszy!

Podstawiając to do naszego przykładu, możemy chcieć oszczędzić procesorowi zbędnego dzielenia przez 1, gdyż wynik będzie równy pierwszej liczbie. "else if" pasuje tu wyśmienicie:

if(b != 0) {
	System.out.println(a + "/" + b + " = " + (a / b));
} else if(b == 1) {
	System.out.println(a + "/" + b + " = " + a);
} else {
	System.out.println("Nie dzielimy przez zero!");
}

To nie oznacza, że następne warunki będą ZAWSZE badane, tylko są one sprawdzane kaskadowo. Oznacza to, że w chwili spełnienia pierwszego (albo każdego kolejnego) warunku, dalsze nie będą sprawdzane. Prostymi słowy:

  • blok "else" wykona się wtedy i tylko wtedy, gdy ani pierwszy, ani drugi warunek, nie zostanie spełniony
  • blok "else if" wykona się wtedy i tylko wtedy, gdy pierwszy warunek nie zostanie spełniony
  • blok "if" wykona się wtedy i tylko wtedy, gdy pierwszy warunek zostanie spełniony

Gdybyście chcieli tak zrobić, żeby wszystkie warunki były sprawdzane mimo wszystko, wystarczy odseparować jeden ciąg od drugiego, aby powstały trzy niezależne bloki:

if(b != 0) {
	System.out.println(a + "/" + b + " = " + (a / b));
}

if(b == 1) {
	System.out.println(a + "/" + b + " = " + a);
}

if(b == 0) {
	System.out.println("Nie dzielimy przez zero!");
}

Kiedy instrukcja warunkowa w języku Java korzysta co najmniej z jednego bloku "else if", pamiętaj że "else" ZAWSZE musi się znaleźć na samym końcu! Określa on wariant ostateczny, kiedy cała reszta opcji zawiedzie.

Instrukcja warunkowa w języku Java

Instrukcja warunkowa w języku Java "steruje" działaniem programu w zależności od spełnienia (lub niespełnienia) danego warunku.

OPERATOR WARUNKOWY: DODATEK SPECJALNY!

Na koniec tego materiału, dwa słowa o operatorze warunkowym, nazywanym także trójargumentowym. Znajduje się tutaj, ponieważ ma duży związek z instrukcją warunkową i samym przebiegiem programu "pod warunkiem". Więcej szczegółów w osobnym artykule, tutaj się skupię na istocie w tym języku.

Operator warunkowy pozwala nam przypisać jedną z dwóch wartości zmiennej w zależności od określonego warunku (zasady budowy takie same, jak u góry - funkcja lub operatory relacyjne). Buduje się go w taki sposób (trzymajmy się cały czas tego przykładu z dzieleniem przez zero):

int result = (b != 0) ? (a / b) : 0;

Zaraz po deklaracji zmiennej (albo tylko samym powołaniu się na istniejącą), po operatorze przypisania (znak równości) konstruujemy ciąg składający się z kilku części:

  • warunek (polecam nawiasy okrągłe, sprzyjają czytelności),
  • znak zapytania,
  • wartość w przypadku spełnienia warunku,
  • dwukropek,
  • wartość w przypadku niespełnienia warunku,
  • średnik (obowiązkowo, jako że to też jest instrukcja).

Znak zapytania świadczy o operatorze trójargumentowym. W miejscach określonych przeze mnie jako "wartość", wprowadzasz stałą bądź wyrażenie zgodne z typem danych zmiennej, do której się odniosłeś(-aś). W ten sposób przy użyciu tego samego wiersza kodu, pieczemy dwie pieczenie na jednym ogniu 🍗😁. Zapis w sposób tradycyjny wyglądałby tak:

int result;

if(b != 0) {
	result = a / b;
} else {
	result = 0;
}

Od razu gorsza czytelność, prawda 😐? Polecam korzystać z tego tak często, jak możesz. To ma pewną dotkliwą wadę: nie jest możliwe osadzanie wywołań funkcji ani wstawianie wielu instrukcji. Jeżeli to naprawdę stanie się konieczne, wtedy musi to być standardowa instrukcja warunkowa w języku Java 😑. Natomiast jeśli starannie podzielisz kod na niewielkie fragmenty, to nie okaże się to aż tak dotkliwe, jak Ci się teraz wydaje 😉.

Operator warunkowy w języku Java

Operator trójargumentowy (zwany zamiennie warunkowym) pozwala w jednym wierszu kodu na przypisanie jednej z dwóch wartości w zależności od spełnienia podanego warunku.


Tym pozytywnym stwierdzeniem kończę niniejszy temat.

PODOBNE ARTYKUŁY