Instrukcja warunkowa IF
2017-03-17 / Krzysztof Kozłowski

Instrukcja warunkowa IF, to instrukcja pozwalająca na wykonanie kawałka kodu tylko wtedy, gdy jakiś warunek jest prawdziwy. A jeśli warunek nie jest prawdziwy, to nie chcemy, by coś się wykonało.

„IF” jest jednym z przykładów – najbardziej podstawowym – instrukcji warunkowych. Są też inne, ale o nich innym razem.

Przykład

Jeśli napiszemy kawałek kodu, np.:

1
move(50);

to wykona on się zawsze, bez względu na to, czy chcemy czy nie. Czasem jednak wykonanie jednej lub kilku instrukcji chcielibyśmy uzależnić od jakiegoś warunku. Np. samochód powinien się poruszać po wykonaniu instrukcji move(), ale tylko wtedy, kiedy ma włączony silnik. Czyli tak, jakbyśmy chcieli powiedzieć:

Jeśli silnik jest włączony, to move(50);

Instrukcja warunkowa IF coś takiego nam właśnie umożliwia. Jej konstrukcja jest bardzo prosta:

1
2
3
if (warunek) {
// kawałek kodu, który ma się wykonać, jeśli warunek jest prawdziwy
}

I już. Ważne tylko, by pamiętać, że warunek – czyli to co umieszczamy w nawiasie po słówku if – to musi być coś, co zwraca wartość prawda lub fałsz (true lub false). Jeśli Java nie będzie potrafiła stwierdzić, czy wpisany warunek jest prawdziwy czy nie, zgłosi błąd i program nie uruchomi się.

Jak widać powyżej po słówku „if” i nawiasach z warunkiem znajdują się nawiasy klamrowe. Są one bardzo ważne, bo dzięki nim Java wie, co ma wykonać, jeśli warunek jest prawdziwy. Trzeba być ostrożnym, by nie zapomnieć np. o zamykającym nawiasie klamrowym.

Przykłady poprawnych wyrażeń warunkowych

Jak napisano powyżej poprawny warunek to taki, który zwraca true lub false. Oto przykłady poprawnych warunków:

4 < 5 (równa się true, bo 4 jest mniejsze niż 5)
5 < 4 (równa się false, bo 5 nie jest mniejsze niż 4)
słowo „Java” rozpoczyna się literą „J” (równa się true; jak taki warunek zapisać dokładnie w Javie – to na ten moment nie jest istotne)
słowo „Java” zawiera literę „a” itd.

Klasa Samochod

W klasie Samochod opisanej niedawno w jednym z przykładów (Samochód z licznikiem kilometrów) mamy pole liczbowe o nazwie licznik do przechowywania ilości przejechanych kilometrów. W oparciu o to pole możemy sprawić, by samochód jechał, ale tylko wtedy, kiedy na liczniku nie mamy więcej niż np. 1000km.

Metoda jedz() poruszająca naszym samochodem wyglądała wtedy tak:

1
2
3
4
public void jedz(int ile) {
move(ile);
licznik = licznik + ile;
}

Zmodyfikujmy ją w ten sposób:

1
2
3
4
5
6
public void jedz(int ile) {
if (licznik < 1000) {
move(ile);
licznik = licznik + ile;
}
}

To spowoduje, że samochód będzie jeździł, ale tylko do momentu, kiedy stan licznika osiągnie wartość 1000, czyli do momentu kiedy warunek „licznik < 1000” zwraca wartość true.

IF bez nawiasów klamrowych

Napisanie instrukcji if bez nawiasów klamrowych po warunku nie jest błędem, ale trzeba pamiętać, co znaczy taki zapis. Jeśli nie napiszemy nawiasów klamrowych, to znaczy że wykonywana w if będzie tylko jedna instrukcja, ta która znajduje się bezpośrednio pod if-em. Przykład:

1
2
3
if (licznik < 1000)
move(50);
move(100);

W powyższym przykładzie tylko pierwsza z instrukcji move(50) jest jakby wewnątrz if-a. Druga z nich – move(100) – znajduje się poza if-em, a więc wykonywana będzie zawsze, bez względu na stan licznika. To samo możnaby zapisać w ten sposób:

1
2
3
4
if (licznik < 1000) {
move(50);
}
move(100);

Jak widać, jeśli zapomniemy o nawiasach klamrowych, to całkowicie zmienimy sposób działania i program nie będzie działał tak, jakbyśmy sobie tego oczekiwali. Warto więc zawsze stosować nawiasy klamrowe, nawet jeśli wewnątrz znajduje się tylko jedna instrukcja. Poprawia to czytelność kodu i przede wszystkim powoduje, że nie popełnimy błędu.

IF … ELSE …

Istnieje rozwinięcie instrukcji warunkowej IF. Wygląda to tak:

1
2
3
4
5
if (warunek) {
// 1. kawałek kodu do wykonania, jeśli warunek prawdziwy
} else {
// 2. kawałek kodu do wykonania, jeśli warunek nieprawdziwy
}

Bardzo podobne, z tym że dodany został kawałek: słówko else i kolejny blok kodu w nawiasach klamrowych. Jak to działa? Jeśli warunek jest spełniony (czyli jeśli równa się true) to wykonywany jest pierwszy kawałek, a w przeciwnym wypadku (czyli jeśli warunek zwraca wartość false) drugi kawałek kodu.

Więcej o IF

Więcej o instrukcji warunkowej IF można dowiedzieć się na stronach:

PermaLink: https://java.kozlowski.photos/2017/03/if/