61 lines
3.1 KiB
Markdown
61 lines
3.1 KiB
Markdown
---
|
||
title: Loops
|
||
localeTitle: Loops
|
||
---
|
||
# Loops
|
||
|
||
Rust поддерживает три типа циклов: `loop` , `while` и `for` .
|
||
|
||
## Бесконечное повторение с `loop`
|
||
|
||
В Rust конструкция `loop` будет непрерывно выполнять блок кода до бесконечности (или пока вы явно не остановите его).
|
||
|
||
Вот пример программы, использующей `loop` для непрерывного вывода слова «again!» на терминал:
|
||
|
||
```rust
|
||
fn main() {
|
||
loop {
|
||
println!("again!");
|
||
}
|
||
}
|
||
```
|
||
|
||
## Условный цикл с `while`
|
||
|
||
Описанный выше механизм не очень полезен, если мы не добавим какое-то условие, по которому `loop` будет останавливаться. К счастью, в Rust есть встроенная конструкция цикла `while`. Её можно использовать для непрерывного выполнения блока до тех пор, пока какое-то условие истинно.
|
||
|
||
Вот пример программы, использующей `while` для обратного отсчета от 5:
|
||
|
||
```rust
|
||
fn main() {
|
||
let mut number = 5;
|
||
|
||
while number != 0 {
|
||
println!("{}", number);
|
||
number = number - 1;
|
||
}
|
||
}
|
||
```
|
||
|
||
Запустите код [здесь](https://play.rust-lang.org/?gist=62677371a8590be27c84dcae7068de57&version=stable).
|
||
|
||
## Перебор коллекции с `for`
|
||
|
||
В некоторых случаях вам может потребоваться пройтись по элементам коллекции (например, массива) и как-то обработать их. Это можно было бы сделать с помощью `while`, используя индексную переменную для доступа к каждому элементу. Чтобы сделать эту операцию гораздо проще, Rust предлагает цикл `for`.
|
||
|
||
Вот пример программы, которая печатает каждое число в массиве на терминал, используя `for` :
|
||
|
||
```rust
|
||
fn main() {
|
||
let collection = [15, 7, 2, 6, 9];
|
||
|
||
for element in collection.iter() {
|
||
println!("the value is: {}", element);
|
||
}
|
||
}
|
||
```
|
||
|
||
Запустите код [здесь](https://play.rust-lang.org/?gist=0c2acf21b96a81ebd411e4a7dc5a19fd&version=stable).
|
||
|
||
Подобно итераторам в C++, `.iter()` возвращает итератор коллекции `collection`, который затем можно использовать в цикле для доступа к каждому элементу `element`. Для получения дополнительной информации перейдите к документации Rust по порядку исполнения ([control flow](https://doc.rust-lang.org/book/second-edition/ch03-05-control-flow.html)).
|