Salt la conținutul principal
Modulul 2 · Lecția 1 din 23/14 în curs~12 min
Lecții din modul (1/2)

Condiționale și bucle

Fluxul de control în Rust se învârte în jurul a două constructe principale: expresii condiționate pentru a decide ce cale de execuție să urmeze și constructe în buclă pentru a repeta instrucțiunile.

Condiționale: if ca expresie

În Rust, instrucțiunea if este o expresie, ceea ce înseamnă că returnează o valoare. Putem folosi if pentru a atribui direct o valoare unei variabile:

Rust
let condition = true;
let number = if condition { 5 } else { 6 }; // if/else as an expression

Bucle și iterații

Rust oferă trei tipuri de bucle native: loop, while și for.

1. loop (buclă infinită)

Cuvântul cheie loop creează o buclă infinită care continuă până când îi spuneți în mod explicit să nu mai folosească break:

Rust
let mut count = 0;
loop {
    count += 1;
    if count == 10 {
        break; // Exit the loop
    }
}

În plus, puteți returna o valoare dintr-un loop plasându-l imediat după break:

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

2. while (Bucla condiționată)

Rulează un bloc de cod atâta timp cât o condiție booleană rămâne adevărată:

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

3. for (Iterație peste colecții și intervale)

Bucla for este cea mai comună și mai sigură unealtă pentru iterarea elementelor dintr-o colecție sau dintr-o serie de numere:

Rust
// Iterates over numbers 1 through 3 (excluding 4)
for number in 1..4 {
    println!("Valore: {}", number);
}

// Iterates including the right boundary using '='
for number in 1..=3 {
    println!("Valore: {}", number); // Prints 1, 2 and 3
}

Etichete bucle

Când aveți de-a face cu bucle imbricate, instrucțiunile break și continue se aplică în mod implicit buclei cele mai interioare. Rust vă permite să utilizați o etichetă de buclă (scrisă ca 'label_name:) pentru a termina sau continua în mod explicit o buclă exterioară:

Rust
let mut count = 0;
'outer: loop {
    loop {
        if count == 5 {
            break 'outer; // Exits the outer loop directly
        }
        count += 1;
    }
}

Încercați-l singur

Exercițiu#rust.m2.l1.e1
Încercări: 0Se încarcă…

Declarați o variabilă numită număr cu o valoare de 7. Apoi, utilizați o expresie if/else pentru a atribui valoarea „mai mare” mesajului variabilă dacă numărul este mai mare de 5 sau „mai mic” în caz contrar. În cele din urmă, tipăriți mesajul folosind println!.

Se încarcă editorul...
Afișează indiciu

Scrieți `let message = if number > 5 { 'greater' } else { 'smaller' };` și transmiteți-l la `println!`.

Soluție disponibilă după 3 încercări

Exercițiu#rust.m2.l1.e2
Încercări: 0Se încarcă…

Scrieți o buclă for care imprimă numerele de la 1 la 5 inclusiv (adică 1, 2, 3, 4, 5) folosind println! la fiecare iterație.

Se încarcă editorul...
Afișează indiciu

Utilizați sintaxa intervalului inclusiv `for i in 1..=5` și rulați `println!('{}', i);` în interiorul blocului.

Soluție disponibilă după 3 încercări

Exercițiu#rust.m2.l1.e3
Încercări: 0Se încarcă…

Scrieți o buclă care incrementează un numărător de variabile mutabile începând de la 0. Când contorul ajunge la 10, ieșiți din contorul care returnează bucla înmulțit cu 5 utilizând instrucțiunea break pentru a atribui această valoare unui rezultat variabil imuabil. În sfârșit, imprimați rezultatul.

Se încarcă editorul...
Afișează indiciu

Folosiți `let result = loop { ... };`. În interiorul buclei incrementează `counter` și adaugă condiția `if counter == 10 { break counter * 5; }`.

Soluție disponibilă după 3 încercări