Перейти до основного вмісту
Модуль 2 · Урок 1 із 23/14 у курсі~12 min
Модульні уроки (1/2)

Умови та цикли

Потік керування в Rust обертається навколо двох основних конструкцій: умовних виразів для визначення шляху виконання та конструкцій циклу для повторення інструкцій.

Умовні слова: if як вираз

У Rust оператор if є виразом, тобто повертає значення. Ми можемо використовувати if, щоб безпосередньо призначити значення змінній:

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

Цикли та ітерації

Rust надає три типи власних циклів: loop, while та for.

1. loop (нескінченний цикл)

Ключове слово loop створює нескінченний цикл, який триває, доки ви явно не скажете йому припинити використання break:

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

Крім того, ви можете повернути значення з loop, розмістивши його одразу після break:

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

2. while (умовний цикл)

Виконує блок коду, поки виконується логічна умова:

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

3. for (Ітерація по колекціях і діапазонах)

Цикл for є найпоширенішим і найбезпечнішим інструментом для повторення елементів у колекції чи діапазоні чисел:

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
}

Циклічні мітки

Під час роботи з вкладеними циклами оператори break та continue за замовчуванням застосовуються до самого внутрішнього циклу. Rust дозволяє використовувати мітку циклу (написану як 'label_name:), щоб явно припинити або продовжити зовнішній цикл:

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

Спробуйте самі

вправи#rust.m2.l1.e1
Спроби: 0Завантаження…

Оголошіть змінну з іменем number зі значенням 7. Далі скористайтеся виразом if/else, щоб призначити значення «greater» змінній message, якщо number більше 5, або «smaller» в іншому випадку. Нарешті, надрукуйте повідомлення за допомогою println!.

Завантаження редактора…
Показати підказку

Напишіть `let message = if number > 5 { 'greater' } else { 'smaller' };` і передайте його в `println!`.

Рішення доступне після 3 спроб

вправи#rust.m2.l1.e2
Спроби: 0Завантаження…

Напишіть цикл for, який друкує числа від 1 до 5 включно (тобто 1, 2, 3, 4, 5) за допомогою println! на кожній ітерації.

Завантаження редактора…
Показати підказку

Використовуйте синтаксис інклюзивного діапазону `for i in 1..=5` і виконайте `println!('{}', i);` всередині блоку.

Рішення доступне після 3 спроб

вправи#rust.m2.l1.e3
Спроби: 0Завантаження…

Напишіть цикл, який збільшує лічильник змінної змінної, починаючи з 0. Коли лічильник досягає 10, вийдіть із циклу, повертаючи лічильник, помножений на 5, використовуючи оператор break, щоб призначити це значення результату незмінної змінної. Нарешті, роздрукуйте результат.

Завантаження редактора…
Показати підказку

Використовуйте `let result = loop { ... };`. Усередині циклу збільште `лічильник` і додайте умову `if counter == 10 { break counter * 5; }`.

Рішення доступне після 3 спроб