Instrukcje warunkowe
"Jeżeli kupisz mi zabawkę to nie będę płakał, w przeciwnym razie zrobię aferę na cały sklep."
Powyższa wypowiedź to typowy warunek, który steruje działaniami rodziców. Pisząc nasze skrypty w zasadzie non stop będziemy stosować podobne warunki, które w naszym przypadku będą sterować przebiegiem naszego programu.
const nr = prompt("Podaj jakąś liczbę");
if (nr > 20) { //jeżeli...
console.log("Liczba jest większa od 20");
} else { //w przeciwnym razie...
console.log("Liczba jest mniejsza lub równa 20");
}Wynik sprawdzenia
Gdy porównujemy ze sobą dwie wartości (tak jak powyżej zmienną nr z liczbą 20), wynikiem takiej operacji zawsze będzie wartość Boolean, czyli true lub false (prawda/fałsz):
const a = 10;
const b = 20;
console.log(b > a); //true
console.log(b < a); //false
console.log(b === a); //falseconst result = a > b;
console.log(result); //falseOstatni listing pokazuje charakterystyczną rzecz, z którą nie raz będziemy się stykać w Javascript. Pod zmienną nr pobraliśmy liczbę, którą wpisze nam w okienko użytkownik. Wartość pobierana z takiego okienka zawsze jest w formacie tekstowym (string). Powyższe równanie będzie miało więc przykładowo postać:
co równoznaczne jest z tym, że przyrównujemy do siebie tekst z liczbą.
W Javascript możemy sprawdzać ze sobą dowolne typy danych.
W przypadku porównywania stringów działa tak zwane porównywanie leksykograficzne (słownikowo), gdzie teksty porównywane są litera po literze:
Przy takim porównaniu stringów brane są pod uwagę pozycje liter na tablicy znaków Unicode. Powoduje to, że "a" jest większe od "A", ponieważ znajduje się na dalszej pozycji w takiej tabeli.
W przypadku porównywania wartości innych typów są one konwertowane do liczb, a następnie porównywane są te liczby:
Tyle tylko, że to, że się da, wcale nie oznacza, że powinieneś robić takie porównania...
Polecam na co dzień pisać może i nieco dłuższy, ale i bezpieczniejszy kod. Tworząc więc warunki staraj się konwertować dane wartości do podobnego typu.
Dzięki takiej manualnej konwersji unikniesz błędów w sytuacjach, które na pierwszy rzut oka wydają się całkowicie prawidłowe:
W powyższym kodzie w konsoli powinniśmy dostać wynik 20, jednak rezultatem jest 1010. Wynika to z tego, że prompt() (podobnie do kontrolek formularzy) zwraca nam dane w formacie tekstowym. Porównanie z linii 2 nie sprawdza typu a tylko wartość, więc "10" == 10 jest prawdziwe. Kod się wykonuje i w rezultacie dostajemy "10" + "10" co daje nam wynik "1010".
Stąd też polecam stosować porównywanie za pomocą trzech znaków (=== lub !==), który w teście bierze pod uwagę także typ danych. Dzięki temu kod taki zmusza nas do jawnej konwersji danej zmiennej na odpowiedni typ:
Tutaj warto wspomnieć, że Webstorm domyślnie każdorazowe użycie podwójnego porównania (==) zaznacza na żółto, co oznacza potencjalny problem. Jeżeli nie chcesz żółtych śmieci na ekranie edytora - stosuj potrójne porównanie 😏 . ...Z takim argumentem nie ma co dyskutować.
Wartości falsy
Tworząc warunki, nie musimy porównywać ze sobą dwóch wartości. Wartością false staje się każda z poniższych wartości. Są to tak zwane wartości falsy:
Dla nas oznacza to tyle, że tworząc warunki możemy wykonywać kod w zależności od stanu danej zmiennej, ale też wartości wpisanej ręcznie w nawias:
Każda inna wartość daje w rezultacie true. Możemy to sprawdzić konwertując dane wartości na Boolean:
Powyższe sprawia, że dość często spotkasz zapisy jak poniżej:
Instrukcja if
Powyżej w listingach używałem instrukcji if, która wykonuje dany kod tylko w przypadku, gdy w nawiasach wynikiem będzie prawda:
Dla każdej instrukcji if możemy zastosować zapisy else i else if:
Co kiedy stosować? Wszystko zależy od sytuacji. Czasami wystarczy zwykłe if, czasami musimy posiłkować się else, a czasami else if będzie tym czego potrzebujemy. Zwróć tylko uwagę, że przy każdej instrukcji if (w tym else if) musimy podać warunek, natomiast else zawsze jest bez warunku.
Dodatkowo takie instrukcje mogą być także zagnieżdżone:
Operator warunkowy
Operator warunkowy (tak zwany ternary operator), to tak naprawdę skrócona wersja warunku if:
Przykłady zastosowania:
switch
Instrukcja switch jest kolejnym sposobem tworzenia warunków - tym razem na zasadzie przyrównania wyniku do konkretnych wartości.
Każdy przypadek kończy się słowem break, które 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 (odpowiednik else w instrukcji if).
Warto zaznaczyć, że instrukcja switch nie służy do testowania warunków, a do przyrównywania zmiennej do wartości:
Jednak i tutaj można przyrównać do warunków. Wystarczy przyrównywać zamiast do zmiennej to do wartości true:
Zastosowanie tego jest niespotykane i traktował bym to jako ciekawostkę.
Last updated