Циклы
while
Цикл while в Rust работает и выглядит так же, как и в других императивных языках:
while условие {
тело цикла
}
Например, вывод на консоль чисел от 5 до 0 (не включительно).
fn main() {
let mut n = 5;
while n > 0 {
println!("{n}");
n -= 1;
}
}
do-while
В Rust нет цикла do-while, но при большой необходимости его можно имитировать через while:
Такой код
|
работает словно
|
loop
В Rust есть специальный “бесконечный” цикл — loop. По сути, это просто аналог while true.
loop {
тело цикла
}
Как и из while true цикла, из loop можно выйти при помощи оператора break.
Например: программа, которая выводит те элементы последовательности Фибоначчи, которые меньше указанного числа (мы подразумеваем, что указанное число всегда больше 1).
fn main() {
let maximum = 30;
let mut a = 0;
let mut b = 1;
print!("{a} {b}");
loop {
let next = a + b;
if next > maximum {
break;
}
print!(" {next}");
a = b;
b = next;
}
}
Оператор break для цикла loop имеет еще одну функциональность: он возвращает значение.
#![allow(unused)]
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2; // возвращаем из цикла
}
};
println!("The result is {}", result); // 20
}
Тип оператора break — never type.
for
В Rust отсутствует “классический” цикл for (как в C) — только for-each, который предназначен для перебора элементов последовательностей.
Синтаксис:
for переменная in последовательность {
тело цикла
}
Пример: перебор элементов массива.
fn main() {
let arr = [10, 20, 30, 40, 50];
for element in arr {
println!("the value is: {}", element);
}
}
При помощи for можно перебирать элементы массивов, слайсов, векторов и еще целого ряда коллекций.
Перебор диапазона
В Rust нет “классического” цикла for вида for (int i=0; i<N; i++). Однако такой перебор числового диапазона требуется довольно часто.
К счастью, в Rust есть диапазоны (Range), которые задаются как начало .. конец, и могут использоваться для перебора элементов в цикле for.
#![allow(unused)]
fn main() {
for i in 0 .. 10 {
print!("{}, ", i);
}
// Напечатает: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
}
Этот цикл перебирает числа от 0 до 10 (не включительно).
Чтобы перебрать числа от 0 до 10 (включительно), надо вместо 0 .. 10 указать 0 ..= 10.
Note
Детальнее о цикле for мы поговорим в главах Владение и Итераторы. Также в главе про Итераторы мы подробнее разберём диапазоны.