Довольно часто программисту нужно повторно выполнять какие либо действия. У rust есть несколько видов цикла, которыми он может нас удовлетворить. Rust имеет три разные циклы, это loop, while, for.
цикл loop. Для создания цикла loop нужно использовать ключевое слово loop и фигурные скобки. Пример:
fn main() {
loop {
println!("hello");
}
}
этот цикл бесконечно раз будет выводить hello на консоль. Цикл loop сам является бесконечным, есть два способа выйти с него, это ключевые слова break и return.
Сравним этот цикл с циклом while
while true {
println!("hi");
}
loop {
println!("hi");
}
цикл loop будет более оптимизирован, чем while, так как процессор знает, что loop это бесконечный цикл и не проверяет никакое условие так как его там нету, а в случаи while процессор всегда проверяет условие и на это уходит время. Так что, если надо бесконечный цикл, то используйте цикл loop.
цикл while.
Часто бывает полезно проверять условие внутри цикла, в таком случаи нам нужно использовать цикл while.
Пример цикла
let mut number = 3;
while number != 0 {
println!("{}!", number);
number -= 1;
}
Цикл вычитает у числа 1 пока число не будет равно 0, после того как число становится равен 0, то цикл завершает свою работу. и программа выполняется дальше.
цикл for.
проход по элементам коллекции с помощью цикла for.
Конечно можно использовать цикл while для прохода по элементам коллекции. Пример:
fn main() {
let a = [10, 20, 30, 40, 50];
let mut index = 0;
while index < 5 {
println!("the value is: {}", a[index]);
index += 1;}
}
цикл пройдется по элементам массива и напечатает их на консоль. Минус этого способа является в том, что если мы изменим количество элементов в массиве то программа во время компиляции может упасть. Например из за того что в массиве 3 элемента, а цикл проходит до 5 элемента, получается ошибка о том, что цикл вышел за границы массива. Или вообще в массиве 10 элементов, а мы вывели только 5.
В этом примере мы использовали цикл for, из за чего код стал более безопасней, и уменьшены риски получения ошибки.
fn main() {
let a = [10, 20, 30, 40, 50];
for element in a.iter() {
println!("the value is: {}", element);
}
}
Также можно еще вот так
fn main() {
for number in (1..4).rev() {
println!("{}!", number);
} }
Вот так может выглядеть реализация обратного отсчёта с применением цикла for и метода rev который изменит последовательность диапазона на обратную