English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Циклы Rust

Язык Rust, помимо гибких условных предложений, имеет также очень зрелую структуру циклов. Это должно быть понятно опытному разработчику.

Цикл while

Цикл 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:

Язык C

int i; 
for (i = 0; i < 10; i++) { 
    // Тело цикла
}

Rust

let mut i = 0; 
while i < 10 { 
    // Тело цикла 
    i += 1; 
}

Цикл for

Цикл 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

Цикл loop

Опытные разработчики, наверное, сталкивались с такими случаями несколько раз: некоторые циклы не могут определить, продолжать ли цикл в начале и конце, и должны контролировать процесс цикла в середине. Если таковое случается, мы часто реализуем операцию выхода из цикла в теле цикла 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