持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情
今天学习的内容是 Rust 中的另一种流程控制逻辑,循环表达式。
流程控制包括分支和循环。Rust 提供了三种循环表达式:
- loop
- while
- for
loop 循环
Rust 中使用关键字loop 表示无限循环,除非使用 break 或者 continue 关键字来手动结束循环。
break 表示终止循环,continue 表示停止本次循环,开始执行下一次循环。
如下,是一个计算 1+2+3+...+100 的值的算法,使用了 loop 循环,当加数达到100后使用 break 结束循环:
fn main() {
let mut sum = 0;
let mut n = 0;
loop {
sum += n;
n += 1;
if n > 100 {
break;
}
}
println!("{}", sum)
}
代码执行,打印出 5050。
前文说过,Rust 中的循环也是表达式,那么就会有值的产生。在 loop 循环中,使用 break 结束循环,并在 break 后面跟上一个值,这个值就是 loop 表达式的值。
如下,从 0 开始计数,当 counter 等于 10 时,结束循环,并将 counter 的值乘以 2,赋值给变量 result。
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
}; // 这里要加上分号
println!("{}", result);
}
while 循环
while 循环是最常见的循环之一。每次开始循环之前先要判断一些 while 的条件,如果条件为真,则执行循环,否则就停止循环。
如下,当变量 num 大于0时执行循环体内的逻辑:
fn main() {
let mut num = 3;
while num > 0 {
println!("{}", num);
num = num - 1;
}
println!("结束循环");
}
for 循环
for 循环应该是使用最多的一种循环了。
在其他语言中,我们常用 for 循环来遍历数组。在Rust 中的 for 循环用来遍历一个迭代器。
创建迭代器有多种方法,最常用的是使用这两种:
a..b:创建一个包含a但不包含b,步长为1的迭代器a..=b:创建一个包含a且包含 b,步长为1的迭代器
示例:
fn main() {
for i in 0..5 {
println!("{}", i);
}
for i in 0..=5 {
println!("{}", i);
}
}
第一个 for 循环打印出 0,1,2,3,4,第二个 for 循环打印出 0,1,2,3,4,5。
for
Rust 中遍历数组,需要先将数组转为遍历器,使用数组的关联方法 iter 或者 iter_mut,区别是后者是可变的。
fn main() {
let mut arr = [1, 2, 3];
for i in arr.iter() {
println!("{}", i);
}
for i in arr.iter_mut() {
*i *= 2;
}
println!("{:?}", arr);
}
第一个 for 循环,将数组转为迭代器,然后进行遍历,打印出数组中元素,分别是 1,2,3。
第二个 for 循环,将数组转为了可变迭代器,然后修改了元素中的元素,每个元素变为了原来的两倍,所以打印的结果是 [2, 4, 6]。
小结
本文介绍了 Rust 中的循环表达式,包括 loop、while 和 for 循环。loop 循环一般用的比较少,可以用来试错。当结果正确时,使用 break 将结果返回。while 和 for 循环是使用最多的。大部分时候都会使用 for 循环。