Ce face while
while conditie { ... } verifică condiția înainte de fiecare pas și se oprește când ea devine false. Dacă este falsă de la început, corpul nu se execută deloc.
Este potrivită când nu știi dinainte de câte ori se repetă, de exemplu „cât timp mai sunt bani în cont”. Pentru parcurgerea unei colecții sau a unui interval, for este mai simplu și mai sigur. Rust nu are do ... while; se scrie cu loop și break la final.
În corpul buclei poți folosi break și continue. O variantă specială, while let, repetă cât timp o valoare se potrivește cu un tipar.
Exemple
Exemplul 1: Câți ani până la o sumă
Nu știm dinainte câți ani durează, deci while este alegerea naturală.
fn main() {
let mut suma = 10_000.0;
let tinta = 15_000.0;
let dobanda = 0.06;
let mut ani = 0;
while suma < tinta {
suma *= 1.0 + dobanda;
ani += 1;
}
println!("După {ani} ani ai {suma:.2} lei");
}
Rezultat
După 7 ani ai 15036.30 lei
Exemplul 2: Cifrele unui număr
Bucla scoate ultima cifră cu % 10 și o elimină cu / 10, până când numărul devine 0.
fn main() {
let mut n: u32 = 70_512;
let mut suma_cifrelor = 0;
let mut cifre = 0;
while n > 0 {
suma_cifrelor += n % 10;
n /= 10;
cifre += 1;
}
println!("{cifre} cifre, suma lor: {suma_cifrelor}");
}
Rezultat
5 cifre, suma lor: 15
Greșeli frecvente
- Uiți să modifici variabila din condiție: bucla nu se mai termină.
- Folosești
while i < v.len()cu un contor scris de mână pentru a parcurge un vector.for x in &vface același lucru fără riscul de a uitai += 1.
Comenzi înrudite
while let: Repetă un bloc cât timp o valoare se potrivește cu un tipar, de exemplu cât timp pop() mai returnează Some.loop, break și continue: loop repetă un bloc la nesfârșit până la un break; break poate returna o valoare, iar continue sare la pasul următor al buclei.for … in: Parcurge pe rând fiecare element al unui interval, al unei colecții sau al unui iterator.if și else: Execută un bloc de cod doar dacă o condiție bool este adevărată. În Rust, if este o expresie: poate da o valoare.