Instrukcje warunkowe

Jeżeli kupisz mi zabawkę, to nie będę płakał.

Powyższa wypowiedź to typowy warunek, który steruje działaniami rodziców. Tak samo Javascript udostępnia nam instrukcje warunkowe, które sterują przebiegiem naszego programu.

Instrukcja warunkowa wykonuje wybrany kod, w zależności czy wartość danego wyrażenia jest prawdą (true) czy fałszem (false).

if

Instrukcja if sprawdza dany warunek, i w zależności od tego czy zwróci true lub false wykona lub nie wykona sekcję kodu zawartą w klamrach:

Ogólna postać tego wyrażenia wygląda następująco:


if (warunek) {
    ...instrukcje jeżeli warunek jest poprany
}

Przykładowo:


var x = 1;
if (x == 1) {
    //warunek się wykona
    console.log('Liczba równa się 1');
}

var x = 2;
if (x != 2) {
    //kod się nie wykona, bo x = 2
    console.log('Liczba' +x+ 'jest różna od 2');
}

Wynikiem sprawdzenia każdego warunku jest wartość true lub false. Warunkiem wcale nie musi być równanie matematyczne (jak powyżej), ponieważ składowe warunku są konwertowane na wartość boolean (czyli przyjmują true/false).
Każda wartość zmiennej, różna od 0, pustego ciągu znaków i od wartości false da nam w wyniku true.


//wypisze Tak
var x = 1;
if (x) {
    console.log('Tak');
} else {
    console.log('Nie')
}

//wypisze Tak
var x = 'tekst';
if (x) {
    console.log('Tak');
} else {
    console.log('Nie');
}

//wypisze Nie
var x = 0;
if (x) {
    console.log('Tak')
} else {
    console.log('Nie')
}

//wypisze Nie
var x = '';
if (x) {
    console.log('Tak')
} else {
    console.log('Nie')
}

Instrukcje warunkowe mogą być także zagnieżdżone:


var x = 1;
var y = 2;

if (x > 0) {
    if (y > 0) {
        ...//jeżeli liczba > 0 i druga_liczba > 0
    }
}

//to samo co powyżej
if (x > 0 && y > 0) {
    ...//kod wykonywany jeżeli liczba > 0 i druga_liczba > 0
}

else

Możemy sprawdzić przeciwieństwo warunku if poprzez zastosowanie klauzuli else:


var x = 5;

if (x == 1) {
    console.log('Liczba równa się 1')
} else {
    console.log('Liczba nie równa się 1')
}

else if

Istnieje też możliwość wykonywania kilku sprawdzeń pod rząd z wykorzystaniem klauzuli else if.


var x = 5;

if (x > 5) {
    console.log('Liczba jest większa od 5');
} else if (x < 5) {
    console.log('Liczba jest mniejsza od 5');
} else {
    console.log('Liczba równa się 5');
}

Skrócona wersja IF

Skrócona wersja warunku IF ma postać:


(wyrażenie) ? zwróć_jeżeli_wyrażenie_true : zwróć_jeżeli_wyrażenie_false

Przykładowo wyrażenie if możemy zapisać w jego skróconej wersji:


var i = 1;
var number = '';

if (i > 0) {
    number = 'dodatnia';
} else {
    number = 'ujemna';
}

//to samo tylko w skróconej wersji

var number = (i > 0)? 'dodatnia' : 'ujemna';

Przykłady zastosowania:


var x = 3;
console.log((x % 2 == 0)? 'parzysta' : 'nieparzysta') //wypisze 'nieparzysta'


var wiek = 21
var status = (wiek < 18) ? "jesteś za młody" : "zapraszamy na seans" //wypisze się 'zapraszamy na seans'


var name = 'Ola';
console.log( (name == 'Ola') ? 'Masz na imię Ola' : 'Nie masz na imię Ola' ) //pokaże 'Masz na imię Ola'


//zagnieżdżone wyrażenia
//sprawdzam liczbę znaków "z" i dostawiam odpowiednie słowo
//np:
//8  znaków
//23 znaki
//14 znaków
//76 znaki

var chars = 32;
var word = (chars == 1) ? "znak" : ( ((chars % 10 > 1 && chars % 10 < 5) && chars > 20) ? "znaki" : "znaków");

console.log(chars + ' ' + word); //wypisze się 32 znaki

instrukcja switch

Instrukcja switch jest kolejnym sposobem testowania warunków działającym na zasadzie przyrównania wyniku do podanych przypadków.


switch (wyrażenie) {
    case przypadek1:
        //fragment wykonywany gdy rezultat wyrażenia jest równy rezultat1 - potrzebuje break;
        break;
    case przypadek2:
        //fragment wykonywany gdy rezultat wyrażenia jest równy rezultat2 - potrzebuje break;
        break;
    default:
        //fragment wykonywany gdy powyższe rezultaty nie są równe rezultatowi wyrażenia - nie potrzebuje break;
}            

Każdy przypadek kończy się słowem break, która kończy wykonywanie instrukcji switch. Jeżeli pominiemy to słowo, wtedy nawet przy pomyślnym przyrównaniu zostaną wykonane kolejne sprawdzenia, co często może powodować błędy. Dodatkowo instrukcja switch ma specjalny przypadek default który będzie wybierany, gdy wszystkie inne przypadki będą błędne.


var numer = 4;
//poniższy warunek zwróci "Numer równa się cztery"
switch (numer) {
    case 1:
        console.log('Numer równa się jeden');
        break;
    case 2:
        console.log('Numer równa się dwa');
        break;
    case 3:
        console.log('Numer równa się trzy');
        break;
    case 4:
        console.log('Numer równa się cztery');
        break;
    default:
        console.log('Nie wiem ile równa się numer');
}

var tool = "obcęgi";
//poniższy warunek zwróci "Wybrałeś obcęgi"
switch (tool) {
    case 'wiertarka':
        console.log('Wybrałeś wiertarkę');
        break;
    case 'śrubokręt':
        console.log('Wybrałeś śrubokręt');
        break;
    case 'obcęgi':
        console.log('Wybrałeś obcęgi');
        break;
    case 'młotek':
        console.log('Wybrałeś młotek');
        break;
    default:
        console.log('Nie wiem co to za narzędzie');
}