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

Rust 循环

En plus des expressions conditionnelles flexibles, Rust a également une conception mature des structures de boucle. Cela devrait être perceptible pour un développeur expérimenté.

Boucle while

La boucle while est le type de boucle conditionnelle le plus typique :

fn main() {
    let mut number = 1; 
    while number != 4 { 
        println!("{}", number); 
        number += 1; 
    } 
    println!("EXIT"); 
}

运行结果:

1
2
3
EXIT

Le langage Rust n'a pas encore do jusqu'à la date de rédaction de ce manuel.-L'utilisation de while, mais do est un mot réservé, peut-être qu'il sera utilisé dans les versions futures.

Dans le langage C, la boucle for utilise des expressions ternaires pour contrôler la boucle, mais dans Rust, cette utilisation n'est pas disponible, et il faut utiliser la boucle while pour la remplacer :

Langage C

int i; 
for(i = 0; i < 10; i++) { 
    // Corps de boucle
}

Rust

let mut i = 0; 
while i < 10 { 
    // Corps de boucle 
    i += 1; 
}

Boucle for

La boucle for est la structure de boucle la plus courante, souvent utilisée pour parcourir une structure de données linéaire (par exemple, un tableau). La boucle for parcourt un tableau :

fn main() { 
    let a = [10, 20, 30, 40, 50]; 
    for i in a.iter() { 
        println!("La valeur : {}", i); 
    } 
}

运行结果:

La valeur : 10
La valeur : 20
La valeur : 30
La valeur : 40
La valeur : 50

这个程序中的 for 循环完成了对数组 a 的遍历。a.iter() 代表 a 的迭代器(iterator),在学习有关于对象的章节以前不做赘述。

当然,for 循环其实是可以通过下标来访问数组的:

fn main() { 
let a = [10, 20, 30, 40, 50]; 
    for i in 0..5 { 
        println!("a[{}] = {}", i, a[i]); 
    } 
}

运行结果:

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 一样使整个循环退出并给予外部一个返回值。这是一个十分巧妙的设计,因为 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