English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Язык Rust, помимо гибких условных предложений, имеет также очень зрелую структуру циклов. Это должно быть понятно опытному разработчику.
Цикл while является наиболее типичным условным циклом:
fn main() { let mut number = 1; while number != 4 { println!("{}", number); number += 1; } println!("EXIT"); }
Результат выполнения:
1 2 3 EXIT
Язык Rust до дня написания этой главы не использует do-while, но do определено как резервируемое слово, возможно, в будущих версиях оно будет использоваться.
В языке C цикл for использует三元 оператор для управления циклом, но в Rust такого использования нет, вместо этого используется цикл while:
int i; for (i = 0; i < 10; i++) { // Тело цикла }
let mut i = 0; while i < 10 { // Тело цикла i += 1; }
Цикл for является наиболее часто используемым циклом, часто используемым для итерации по линейной структуре данных (например, массиву). Цикл for итерирует массив:
fn main() { for i in a.iter() { println!("Значение: {}", i); } }
Результат выполнения:
Значение: 10 Значение: 20 Значение: 30 Значение: 40 Значение: 50
Цикл for в этой программе выполняет итерацию по массиву a. a.iter() представляет собой итератор (iterator) массива a, о котором не будем говорить до главы о объектах.
fn main() { println!("a[{}] = {} } }
Результат выполнения:
a[0] = 10 a[1] = 20 a[2] = 30 a[3] = 40 a[4] = 50
Опытные разработчики, наверное, сталкивались с такими случаями несколько раз: некоторые циклы не могут определить, продолжать ли цикл в начале и конце, и должны контролировать процесс цикла в середине. Если таковое случается, мы часто реализуем операцию выхода из цикла в теле цикла while (true).
Язык Rust имеет врожденную структуру бесконечного цикла — loop:
fn main() { let s = ['R', 'U', 'N', 'O', 'O', 'B']; let mut i = 0; loop { let ch = s[i]; if ch == 'O' { break; } println!("'{}'", ch); i += 1; } }
Результат выполнения:
'R' 'U' 'N'
Цикл loop можно выйти с помощью ключевого слова break, подобно return, чтобы退出 весь цикл и предоставить внешнюю возвращаемую wartość. Это очень умный дизайн, так как цикл loop часто используется в качестве средства поиска, и если что-то найдено, конечно, нужно предоставить этот результат:
fn main() { let s = ['R', 'U', 'N', 'O', 'O', 'B']; let mut i = 0; let location = loop { let ch = s[i]; if ch == 'O' { break i; } i += 1; }; println!("索引 'O' составляет {}", location); }
Результат выполнения:
Индекс 'O' составляет 3