JavaScript dla każdego
//  wróć   główna   dalej  //

Instrukcja warunkowa

if else switch case default ?:

Instrukcja warunkowa wykonuje odpowiednie polecenia w zależności od wartości zwróconej przez argument warunku. Ma ona następującą postać:

if (warunek) {instrukcje1} else {instrukcje2}

Jeśli warunek ma wartość true (jest prawdziwy), wtedy zostaną wykonane instrukcje z pierwszego nawiasu. W przeciwnym razie (gdy przyjmie wartość false) zostaną wykonane instrukcje z drugiego. Drugi nawias wraz z instrukcją else można opuścić, jeśli nie ma potrzeby wprowadzania go.

W poniższym przykładzie za zmienną System zostaje podstawiona wartość logiczna zwrócona przez okienko dialogowe. Następnie zmienna ta jest warunkiem w instrukcji wyboru:

System=confirm("Czy używasz systemu operacyjnego Windows?");
if (System) {alert('Komentarz 1')}
else {alert('Komentarz 2')}

W ostatniej linijce przed else nie stawia się średnika, bo Navigator nie wykona instrukcji warunkowej. Instrukcja działałaby nieprawidłowo, gdyby w drugiej linijce ww. przykładu znalazł się średnik. Powinien on się znaleźć, gdyby instrukcja else była w tej samej linijce, co instrukcja warunkowa if, tzw. cały warunek umieszczony byłby w jednej linijce.

Forma wyżej wypisana nie jest przejrzysta. Można ją nieco skrócić. Zamiast konstrukcji if else proponuję zastosować nieco krótszą:

(warunek) ? {instrukcje_gdy_true} : {instrukcje_gdy_false}

Zasada działania jest identyczna, ale krótszy zapis. Instrukcje muszą się znajdować w odpowiednich dla siebie nawiasach. Jest to jednak konstrukcja przewidziana tylko dla jednego polecenia i nie można stosować w niej średników. Jeżeli rezygnujemy z instrukcji w przypadku fałszu, należy pozostawić puste nawiasy. Powyższe instrukcje mogą równie dobrze wyglądać tak:

confirm("Czy używasz systemu Windows?") ? alert('Ja też') : alert('A ja tak')
alert(confirm("Czy używasz systemu Windows?") ? "Ja też" : "A ja tak");

Oba przypadki dają ten sam efekt, drugi jest nieco krótszy i optymalniejszy, ale dla mniej wprawnych mniej czytelniejszy.

Bardzo ważna instrukcją jest switch. Służy do podejmowania wyboru wielowariantowego. Np. zmienna może przyjmować 4 wartości (obsługuje strzałki na klawiaturze) i dla każdej z nich będzie wykonywana inna instrukcja. Można do tego użyć instrukcji if lub czasem zastosować ?:. Jednak wygodnym będzie zbudowanie takiego warunku przy pomocy tej właśnie instrukcji:

switch(strzalka) //tak zaczyna się zawsze taki blok
{ //nawiasy są konieczne
 case 1: Dir=9; break; //if (strzalka==1) Dir=9
 case 2: Dir=12; break; //break powoduje zakończenie instrukcji switch
 case 3: Dir=3; break;
 case 4: Dir=6; break;
}

Instrukcja jest w wielu wypadkach bardzo wygodna, jednak należy pamiętać o kilku ważnych elementach, bo nieuwaga powoduje bardzo poważne konsekwencje. Po pierwsze brak użycia instrukcji break spowoduje, że wszystkie następne instrukcje (aż do napotkania kolejnego break'a lub końca bloku switch'a) zostaną wykonane. W tym przykładzie opuszczenie wszystkich instrukcji spowoduje, że jeśli jakiś strzałka przyjmie jedną z 4 wartości, to Dir zawsze będzie równy 6.Oto inny przykład, który pokaże bardziej rozbudowane możliwości tej instrukcji.

switch(alarm) 
{
 case 2: case 3: los=12; break; //średnik między case'ami można opuścić
 case 0: ;case 1: los=9; break; //if (alarm==0 || alarm==1) los=9
 case 4: los=3; //brak break'a -> Wypisz() i Sprawdz() też się wykonają!
 case 5: Wypisz();
 	Sprawdz(); //dla alarm==3 wykonaj 2 instrukcje
	break; //ten break zadziała dla alarm==4 i alaram==5
 default: Koniec(); //gdyby żaden warunek nie został spełniony
}

Zapomnienie instrukcji break może się skończyć nieoczekiwanymi wynikami. Z jednej strony jest to dość uciążliwe, ale z drugiej pozwala wykonać jedną instrukcję dla kilku warunków, trzeba tylko umiejętnie ułożyć case'y. Jeśli alarm nie przyjmie żadnej wartości 0-5, to domyślnie zostaną wykonane instrukcje za default, czyli funkcja Koniec().


Do góry