Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Ключевое слово if в Rust

Что вы узнаете: конструкции управления потоком выполнения в Rust — if/else как выражения, loop/while/for, match и то, чем они отличаются от аналогов в C/C++. Ключевая мысль: большинство конструкций управления потоком в Rust возвращают значения.

  • В Rust if — это выражение, то есть его можно использовать для присваивания значений, но он также ведёт себя как оператор. ▶ Попробовать
fn main() {
    let x = 42;
    if x < 42 {
        println!("Smaller than the secret of life");
    } else if x == 42 {
        println!("Is equal to the secret of life");
    } else {
        println!("Larger than the secret of life");
    }
    let is_secret_of_life = if x == 42 {true} else {false};
    println!("{}", is_secret_of_life);
}

Циклы while и for в Rust

  • Ключевое слово while можно использовать для цикла, пока выражение истинно
fn main() {
    let mut x = 40;
    while x != 42 {
        x += 1;
    }
}
  • Ключевое слово for можно использовать для итерации по диапазонам
fn main() {
    // Не выведет 43; используйте 40..=43, чтобы включить последний элемент
    for x in 40..43 {
        println!("{}", x);
    } 
}

Циклы loop в Rust

  • Ключевое слово loop создаёт бесконечный цикл, пока не встретится break
fn main() {
    let mut x = 40;
    // Замените на 'here: loop, чтобы указать необязательную метку цикла
    loop {
        if x == 42 {
            break; // Используйте break x; чтобы вернуть значение x
        }
        x += 1;
    }
}
  • Оператор break может включать необязательное выражение, которое используется для присваивания значения выражению loop
  • Ключевое слово continue возвращает выполнение к началу loop
  • Метки циклов можно использовать с break или continue; они полезны при работе с вложенными циклами

Блоки-выражения в Rust

  • Блок-выражение в Rust — это просто последовательность выражений в {}. Значением блока становится последнее выражение в нём
fn main() {
    let x = {
        let y = 40;
        y + 2 // Примечание: ; здесь не ставится
    };
    // Обратите внимание на вывод в стиле Python
    println!("{x}");
}
  • В стиле Rust принято опускать ключевое слово return в функциях, используя это правило
fn is_secret_of_life(x: u32) -> bool {
    // То же, что if x == 42 {true} else {false}
    x == 42 // Примечание: ; здесь не ставится
}
fn main() {
    println!("{}", is_secret_of_life(42));
}