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:
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:
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:
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:
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:
// 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:
let mut count = 0;
'outer: loop {
loop {
if count == 5 {
break 'outer; // Esce direttamente dal loop esterno
}
count += 1;
}
}
Spróbuj sam
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!.
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
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.
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
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.
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