Перейти к основному содержимому
Модуль 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, чтобы присвоить переменной message значение «больше», если число больше 5, или «меньше» в противном случае. Наконец, напечатайте сообщение, используя 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 = цикл { ... };`. Внутри цикла увеличьте `counter` и добавьте условие `if counter == 10 {break counter * 5; }`.

Решение доступно после 3 попыток