大家好呀
欢迎来到这个学习 Rust 的 30 天系列的第五天,今天我们将深入了解 Rust 中的控制流。
控制流,顾名思义,根据条件来 控制程序的流程。
If 表达式
当你想要在满足条件时执行一段代码块时,可以使用 if
表达式。
示例
rust
fn main(){
let age: u32 = 17;
if age > 18{
println!("你已经成年了");
}
}
这个程序会检查年龄是否大于 18。如果是,它会输出"你已经成年了"。
那如果条件不满足时要输出什么呢?
Else 表达式
当某个条件不满足时,可以使用 else
表达式来执行一段代码块。
rust
fn main(){
let age: u32 = 17
if age>18{
println!("你已经成年了");
}else{
println!("你还不是成年人");
}
}
这个程序会检查年龄是否大于 18。如果是,它会输出"你已经成年了",否则会输出"你还不是成年人"。
Else If 表达式
else if
表达式可以用来检查多个条件。例如:
rust
fn main(){
let number = 92;
if number % 9 == 0{
println!("数字可以被 9 整除");
} else if number % 5 == 0{
println!("数字可以被 5 整除");
}else if number % 3 == 0{
println!("数字可以被 3 整除");
}else{
println!("数字不能被 9、5、3 整除");
}
}
循环
循环用于重复执行一段代码,直到明确指定停止,或满足某个条件。
loop
关键字
loop
关键字告诉 Rust 运行一段代码块,直到使用 break
关键字停止。
rust
fn main() {
let mut i: u32 = 0;
let mut j: i32 = 10;
// 带有 break 语句的有标签的无限循环
'counting_down: loop {
if j >= 0 {
println!("{}", j);
j -= 1;
} else {
println!("倒计时循环完成");
break 'counting_down;
}
}
}
解释:
main
函数是 Rust 程序的入口点。j
是类型为i32
(有符号 32 位整数)的变量,初始化为 10。- 代码进入一个带有标签的无限循环,标记为
'counting_down
。 - 循环内部有一个条件语句,检查
j
是否大于或等于 0。 - 如果为真,则使用
println!
打印j
的当前值,并将j
减 1。 - 如果为假(当
j
小于 0 时),则打印一条消息并跳出标记为'counting_down
的循环。 - 循环会一直进行,直到执行
break 'counting_down;
语句。 - 标签
'counting_down
用于指定要跳出的循环,特别是在处理嵌套循环时。
While 循环
while
循环会在指定条件为真时重复执行一段代码块。
示例:
rust
fn main(){
let mut num: u8 = 4;
while num!=0 {
println!("{}",num);
num-=1;
}
}
解释:
- 声明一个可变变量
num
,并将其初始化为值 4。它的类型是u8
(无符号 8 位整数)。 - 代码进入一个
while
循环,条件为num != 0
。 - 循环内部使用
println!
打印num
的当前值。 - 然后使用
num -= 1;
语句将num
的值减 1。 - 循环会在条件
num != 0
为真时继续。 - 程序会按照从初始值(4)开始的递减顺序打印
num
的值,直到变为 0。 - 一旦
num
变为 0,循环结束,程序继续执行循环外的任何后续代码。
For 循环
for
循环会遍历范围、集合或迭代器,对每个迭代执行一段代码块。
示例:
rust
fn main(){
// 数组的 for 循环
let array: [u8; 10] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
println!("使用 for 循环访问数组");
for item in array {
println!("{}", item);
}
// 范围内的 for 循环
println!("范围内的 for 循环 ");
for number in 0..=5 {
println!("{number}");
} println!("范围内的 for 循环(反向)");
for number in (0..=5).rev() {
println!("{number}");
}
}
总结
控制流是任何编程语言中非常重要的一部分。这也是我把一整天都用来学习这个的原因。明天我会继续探讨 Rust 中的所有权和内存管理。欢迎大家持续关注,一起学习哦。