Lekcja 4: Instrukcje Warunkowe
Instrukcje warunkowe pozwalają na wykonywanie różnych bloków kodu w zależności od tego, czy określone warunki są spełnione (prawdziwe) czy nie (fałszywe). Są one fundamentalnym elementem logiki w programowaniu.
Instrukcja `if`
Najprostsza instrukcja warunkowa. Wykonuje blok kodu tylko wtedy, gdy podany warunek jest prawdziwy.
if (warunek) {
// Kod do wykonania, jeśli warunek jest prawdziwy
}
let wiek = 20;
if (wiek >= 18) {
console.log("Jesteś pełnoletni.");
}
// Jeśli wiek < 18, nic się nie wyświetli
Instrukcja `if...else`
Pozwala na wykonanie jednego bloku kodu, gdy warunek jest prawdziwy, i innego bloku, gdy warunek jest fałszywy.
if (warunek) {
// Kod do wykonania, jeśli warunek jest prawdziwy
} else {
// Kod do wykonania, jeśli warunek jest fałszywy
}
let temperatura = 15;
if (temperatura > 20) {
console.log("Jest ciepło.");
} else {
console.log("Jest chłodno."); // Ten kod zostanie wykonany
}
Instrukcja `if...else if...else`
Umożliwia sprawdzenie wielu warunków po kolei. Wykonany zostanie blok kodu odpowiadający pierwszemu prawdziwemu warunkowi. Opcjonalny blok `else` na końcu zostanie wykonany, jeśli żaden z wcześniejszych warunków nie był prawdziwy.
if (warunek1) {
// Kod dla warunku 1
} else if (warunek2) {
// Kod dla warunku 2
} else if (warunek3) {
// Kod dla warunku 3
} else {
// Kod, jeśli żaden warunek nie jest prawdziwy (opcjonalny)
}
let ocena = 75;
if (ocena >= 90) {
console.log("Ocena: 5");
} else if (ocena >= 75) {
console.log("Ocena: 4"); // Ten kod zostanie wykonany
} else if (ocena >= 50) {
console.log("Ocena: 3");
} else {
console.log("Ocena: 2");
}
Instrukcja `switch`
Alternatywa dla długich łańcuchów `if...else if...else`, szczególnie przydatna, gdy porównujemy jedną wartość z wieloma możliwymi stałymi wartościami.
switch (wyrazenie) {
case wartosc1:
// Kod dla wartosc1
break; // Ważne: przerywa wykonanie switch
case wartosc2:
// Kod dla wartosc2
break;
// ... inne przypadki
default:
// Kod, jeśli żadna wartość nie pasuje (opcjonalny)
}
Instrukcja switch
porównuje wartość wyrazenie
z wartościami podanymi w kolejnych case
(używając porównania identyczności ===
). Jeśli znajdzie dopasowanie, wykonuje kod od tego miejsca aż do napotkania instrukcji break
lub końca switch
.
Instrukcja break
jest kluczowa - bez niej wykonanie "przejdzie" do następnego bloku case
, co zazwyczaj nie jest pożądane.
Blok default
jest opcjonalny i wykonuje się, gdy żadna z wartości case
nie pasuje.
let dzienTygodnia = 3;
let nazwaDnia;
switch (dzienTygodnia) {
case 1:
nazwaDnia = "Poniedziałek";
break;
case 2:
nazwaDnia = "Wtorek";
break;
case 3:
nazwaDnia = "Środa"; // Pasuje!
break;
case 4:
nazwaDnia = "Czwartek";
break;
case 5:
nazwaDnia = "Piątek";
break;
case 6:
nazwaDnia = "Sobota";
break;
case 7:
nazwaDnia = "Niedziela";
break;
default:
nazwaDnia = "Nieprawidłowy numer dnia";
}
console.log(nazwaDnia); // "Środa"
Truthy i Falsy w warunkach
Instrukcje warunkowe nie wymagają jawnych wartości true
lub false
. Mogą działać z dowolnymi wartościami, które są interpretowane jako "prawdziwe" (truthy) lub "fałszywe" (falsy).
Przypomnienie wartości "falsy": false
, 0
, -0
, 0n
, ""
, null
, undefined
, NaN
.
Wszystkie inne wartości są "truthy".
let uzytkownik = "Jan";
if (uzytkownik) { // uzytkownik jest stringiem niepustym, więc jest "truthy"
console.log(`Witaj, ${uzytkownik}!`); // Ten kod zostanie wykonany
} else {
console.log("Witaj, gościu!");
}
let liczbaProduktow = 0;
if (liczbaProduktow) { // liczbaProduktow to 0, więc jest "falsy"
console.log("Masz produkty w koszyku.");
} else {
console.log("Twój koszyk jest pusty."); // Ten kod zostanie wykonany
}
Zadanie praktyczne
Napisz skrypt używający instrukcji if...else if...else
, który sprawdza, czy podana liczba num
jest dodatnia, ujemna, czy równa zero. Wyświetl odpowiedni komunikat w konsoli.
Pokaż rozwiązanie
let num = -5; // Możesz zmienić tę wartość, aby przetestować
if (num > 0) {
console.log("Liczba jest dodatnia.");
} else if (num < 0) {
console.log("Liczba jest ujemna.");
} else {
console.log("Liczba jest równa zero.");
}
Zadanie do samodzielnego wykonania
Napisz skrypt używający instrukcji switch
, który na podstawie zmiennej miesiac
(liczba od 1 do 12) przypisze do zmiennej poraRoku
odpowiednią porę roku ("Wiosna", "Lato", "Jesień", "Zima"). Przyjmij uproszczony podział: 3-5 to Wiosna, 6-8 to Lato, 9-11 to Jesień, 12, 1, 2 to Zima. Wyświetl wynik w konsoli.
FAQ - Instrukcje Warunkowe
Kiedy lepiej użyć `if...else if`, a kiedy `switch`?
switch
jest zazwyczaj lepszy, gdy porównujesz jedną zmienną z wieloma konkretnymi, stałymi wartościami (liczbowymi lub stringami). if...else if
jest bardziej elastyczny i lepiej nadaje się do sprawdzania złożonych warunków, zakresów wartości lub porównywania różnych zmiennych.
Co się stanie, jeśli zapomnę `break` w `switch`?
Jeśli pominiesz break
, wykonanie kodu będzie kontynuowane w następnym bloku case
, niezależnie od tego, czy jego warunek jest spełniony. Nazywa się to "fall-through". Czasami jest to celowe, ale najczęściej prowadzi do błędów logicznych, dlatego ważne jest, aby pamiętać o break
.
Czy mogę zagnieżdżać instrukcje warunkowe?
Tak, instrukcje if
, else if
, else
i switch
można umieszczać wewnątrz innych instrukcji warunkowych. Pozwala to na tworzenie bardziej złożonej logiki, ale należy uważać, aby kod pozostał czytelny i unikać zbyt głębokiego zagnieżdżania.
Jak `switch` porównuje wartości w `case`?
Instrukcja switch
używa ścisłego porównania (identyczności ===
) do sprawdzania dopasowania między wyrażeniem w switch
a wartościami w case
. Oznacza to, że porównywane są zarówno wartości, jak i typy, bez automatycznej konwersji typów.
Czy blok `else` jest zawsze wymagany?
Nie, blok else
w instrukcji if
oraz blok default
w instrukcji switch
są opcjonalne. Używa się ich, gdy chcemy wykonać jakiś kod w sytuacji, gdy żaden z wcześniejszych warunków nie został spełniony.
Czy mogę używać operatorów logicznych w warunkach `if`?
Oczywiście. Operatory logiczne &&
(AND), ||
(OR) i !
(NOT) są często używane w warunkach if
do tworzenia bardziej złożonych warunków, które łączą wiele sprawdzeń w jednym wyrażeniu logicznym.