Przejdź do głównej treści
eLearner.app
Moduł 2 · Lekcja 1 z 23/14 w kursie~12 min
Lekcje modułu (1/2)

Instrukcje warunkowe i pętle

Sterowanie przepływem w języku Rust opiera się na dwóch głównych konstrukcjach: wyrażeniach warunkowych służących do decydowania o wyborze ścieżki oraz pętlach służących do powtarzania instrukcji.

Warunki: if jako wyrażenie

W języku Rust instrukcja if jest wyrażeniem (expression), co oznacza, że zwraca wartość. Możemy użyć if do bezpośredniego przypisania wartości do zmiennej:

Code
let condition = true;
let number = if condition { 5 } else { 6 }; // if/else come espressione

Pętle i iteracje

Rust udostępnia trzy natywne rodzaje pętli: loop, while i for.

1. loop (pętla nieskończona)

Słowo kluczowe loop tworzy nieskończoną pętlę, która działa, dopóki nie nakażesz jej jawnie zatrzymania za pomocą break:

Code
let mut count = 0;
loop {
    count += 1;
    if count == 10 {
        break; // Esce dal ciclo
    }
}

Dodatkowo można zwrócić wartość z pętli loop, umieszczając ją tuż po instrukcji break:

Code
let result = loop {
    count += 1;
    if count == 10 {
        break count * 2; // Restituisce 20
    }
};

2. while (pętla warunkowa)

Wykonuje blok kodu tak długo, jak długo warunek logiczny pozostaje prawdziwy:

Code
let mut number = 3;
while number != 0 {
    println!("{}!", number);
    number -= 1;
}

3. for (iteracja po kolekcjach i zakresach)

Pętla for jest najpopularniejszym i najbezpieczniejszym narzędziem do przechodzenia po elementach kolekcji lub zakresach liczb:

Code
// Itera sui numeri da 1 a 3 (escluso il 4)
for number in 1..4 {
    println!("Valore: {}", number);
}

// Itera includendo l'estremo destro usando '='
for number in 1..=3 {
    println!("Valore: {}", number); // Stampa 1, 2 e 3
}

Etykiety pętli (Loop Labels)

W przypadku pętli zagnieżdżonych instrukcje break i continue odnoszą się domyślnie do pętli najbardziej wewnętrznej. Rust pozwala na przypisanie etykiety do pętli (zapisywanej jako 'nazwa_etykiety:) w celu możliwości jawnego przerwania lub kontynuowania pętli zewnętrznej:

Code
let mut count = 0;
'outer: loop {
    loop {
        if count == 5 {
            break 'outer; // Esce direttamente dal loop esterno
        }
        count += 1;
    }
}

Spróbuj sam

Ćwiczenie#rust.m2.l1.e1
Próby: 0Ładowanie...

Zadeklaruj zmienną o nazwie number z wartością 7. Następnie użyj wyrażenia if/else, aby przypisać do zmiennej message wartość 'greater', jeśli number jest większe niż 5, lub 'smaller' w przeciwnym razie. Na koniec wypisz message za pomocą println!.

Ładowanie edytora...
Pokaż wskazówkę

Zapisz `let message = if number > 5 { 'greater' } else { 'smaller' };` i przekaż ją do `println!`.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#rust.m2.l1.e2
Próby: 0Ładowanie...

Napisz pętlę for, która wypisuje liczby od 1 do 5 włącznie (czyli 1, 2, 3, 4, 5) za pomocą println! w każdej iteracji.

Ładowanie edytora...
Pokaż wskazówkę

Użyj składni zakresu włączającego `for i in 1..=5` i wykonaj `println!('{}', i);` wewnątrz bloku.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#rust.m2.l1.e3
Próby: 0Ładowanie...

Napisz pętlę loop, która zwiększa zmienną modyfikowalną counter, zaczynając od 0. Kiedy counter osiągnie wartość 10, wyjdź z pętli zwracając counter pomnożone przez 5 za pomocą instrukcji break, aby przypisać tę wartość do zmiennej niezmiennej result. Na koniec wypisz result.

Ładowanie edytora...
Pokaż wskazówkę

Użyj `let result = loop { ... };`. Wewnątrz pętli zwiększaj `counter` i wstaw warunek `if counter == 10 { break counter * 5; }`.

Rozwiązanie dostępne po 3 próbach