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 spotkasz 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 w tym języku 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 musi znaleźć 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żesz chcieć coś wykonać również w sytuacji, gdy warunek NIE zostanie spełniony. Sięgasz wtedy do słowa "else", tylko już nie wstawiasz ż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 łączysz oba poznane słówka i wychodzi: "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ś chciał(a) 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 (trzymamy 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żeli 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 🏁.

NASTĘPNY ARTYKUŁ: switch w języku Java. Instrukcja wielokrotnego wyboru

PODOBNE ARTYKUŁY