03-控制流和代码块
...大约 3 分钟
本文摘编自:快速入门:Rust中有哪些你不得不了解的基础语法?(著作权归AI悦创所有)
2. Rust 中的控制流
下面我们来了解一下 Rust 语言的控制流语句。
1. 分支语句 if else
Rust 中使用 if else 来构造分支。
fn main() {
let number = 6;
// 判断数字number能被4,3,2中的哪一个数字整除
if number % 4 == 0 {
println!("number is divisible by 4");
} else if number % 3 == 0 {
println!("number is divisible by 3");
} else if number % 2 == 0 {
println!("number is divisible by 2");
} else {
println!("number is not divisible by 4, 3, or 2");
}
}
与其他 C 系语言不同,Rust 中 if 后面的条件表达式不推荐用 ()
包裹起来,因为 Rust 设计者认为那个是不必要的,是多余的语法噪音。
还要注意一点,if else 支持表达式返回。
fn main() {
let x = 1;
// 在这里,if else 返回了值
let y = if x == 0 {
// 代码块结尾最后一句不加分号,表示把值返回回去
100
} else {
// 代码块结尾最后一句不加分号,表示把值返回回去
101
};
println!("y is {}", y);
}
像上面这样的代码,其实已经实现了类似于 C 语言中的三目运算符这样的设计,在 Rust 中,不需要额外提供那样的特殊语法。
2. 循环语句
Rust 中有三种循环语句,分别是 loop、while、for。
loop
用于无条件(无限)循环。
fn main() {
let mut counter = 0;
// 这里,接收从循环体中返回的值,对result进行初始化
let result = loop {
counter += 1;
if counter == 10 {
// 使用break跳出循环,同时带一个返回值回去
break counter * 2;
}
};
println!("The result is {result}");
}
请仔细品味这个例子,这种返回一个值到外面对一个变量初始化的方式,是 Rust 中的习惯用法,这能让代码更紧凑。
while
循环为条件判断循环。
当后面的条件为真的时候,执行循环体里面的代码。和前面的 if 语句一样,Rust 中的 while 后面的条件表达式不推荐用 ()
包裹起来。比如:
fn main() {
let mut number = 3;
while number != 0 {
println!("{number}!");
number -= 1;
}
println!("LIFTOFF!!!");
}
for
循环在 Rust 中,基本上只用于**迭代器**的遍历。
Rust 中没有 C 语言那种 for 循环风格的语法支持,因为那被认为是一种不好的设计。
你可以看一下下面的代码,就是对一个数组进行遍历。
for
+ element+ in
fn main() {
let a = [10, 20, 30, 40, 50];
for element in a {
println!("the value is: {element}");
}
}
上面代码对动态数组 Vec 的遍历阻止了越界的可能性,因此用这种方式访问 Vec 比用下标索引的方式访问更加安全。
对于循环的场景,Rust 还提供了一个便捷的语法来生成遍历区间: ..
(两个点)。
请看下面的示例。
遍历
数字遍历
fn main() {
// 左闭右开区间
for number in 1..4 {
println!("{number}"); //在for循环可以这么用,但是打印其他内容不可以
}
println!("--");
// 左闭右闭区间
for number in 1..=4 {
println!("{number}");
}
println!("--");
// 反向
for number in (1..4).rev() {
println!("{number}");
}
}
// 输出
1
2
3
--
1
2
3
4
--
3
2
1
字符遍历(以英文字母顺序)
fn main() {
for ch in 'a'..='z' {
println!("{ch}");
}
}
// 输出:
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Powered by Waline v3.1.3