【Rust】003-基础语法:流程控制
文章目录
- 【Rust】003-基础语法:流程控制
- 一、概述
- [二、if 表达式](#二、if 表达式)
- 三、循环
-
- 1、loop:无限循环,可跳出
- 2、while:条件循环,可跳出
- 3、for:常用于访问集合
-
- [访问集合:while 示例](#访问集合:while 示例)
- [访问集合:for 示例](#访问集合:for 示例)
- [对一个 range 进行循环](#对一个 range 进行循环)
- 4、labels:给循环加标签
一、概述
控制流是编程语言的一个重要概念。程序员通过控制流可以控制哪些代码要执行。在Rust中,最常见的两种控制流结构是if
表达式和循环。
二、if 表达式
1、语法格式
这里的 condition 必须是 bool 类型
rust
if condition {
// code to execute if the condition is true
} else {
// code to execute if the condition is false
}
2、多个
rust
if condition1 {
// code to execute if condition1 is true
} else if condition2 {
// code to execute if condition1 is false and condition2 is true
} else {
// code to execute if both conditions are false
}
3、获取表达式的值
正如这一小节的标题所说,
if
其实是一个表达式,具有返回值。需要注意的是,
if
分支和else
分支的返回值必须是同一类型。
rust
fn main() {
let temperature = 20;
let weather = if temperature >= 25 {
"hot"
} else {
"cool"
};
println!("The weather today is {}.", weather);
}
三、循环
Rust中提供了三种循环方式,
loop
,while
,for
。
1、loop:无限循环,可跳出
无限循环
loop
关键字会创建一个无限循环
rust
loop {
// code to execute repeatedly
}
跳出循环
想要从循环中跳出,需要配合
break
关键词使用,下面的代码也展示了 continue 的用法!
rust
let mut counter = 0;
loop {
counter += 1;
if counter < 5 {
continue;
}
println!("Hello, world!");
if counter >= 5 {
break;
}
}
返回值
rust
fn main() {
let target = 10;
let mut sum = 0;
let mut counter = 1;
let result = loop {
sum += counter;
if sum >= target {
break counter; // The value of counter will be returned from the loop as a result
}
counter += 1;
};
println!("The first number whose sum of all previous numbers is greater than or equal to {} is {}.", target, result);
}
2、while:条件循环,可跳出
rust
while condition {
// code to execute while the condition is true
}
3、for:常用于访问集合
访问集合:while 示例
rust
fn main() {
let numbers = [1, 2, 3, 4, 5];
let mut index = 0;
while index < numbers.len() {
println!("The value is: {}", numbers[index]);
index += 1;
}
}
访问集合:for 示例
rust
fn main() {
let numbers = [1, 2, 3, 4, 5];
for number in numbers {
println!("The value is: {}", number);
}
}
对一个 range 进行循环
这里的
1..=3
表示[1,3]
这个区间的整数。如果是左闭右开,要写成1..3
。
rust
fn main() {
for x in 1..=3 {
println!("x: {}", x);
}
}
4、labels:给循环加标签
三种循环都支持!
当循环存在嵌套关系时,break
和continue
只会对最内层的循环生效。但是有时候我们希望可以对外层的循环做break
或者continue
,这时该怎么办?幸运的是,Rust 可以给循环加上标签,从而break
和continue
都可以直接操作标签。
rust
fn main() {
let x = 1;
'outer: loop {
let mut y = 1;
'inner: loop {
if y == 3 {
y += 1;
continue 'inner; // Skips to the next iteration of the 'inner loop
}
println!("x: {}, y: {}", x, y);
y += 1;
if y > 5 {
break 'outer; // Breaks out of the 'inner loop
}
}
}
}
带返回值
rust
fn main() {
let x = 1;
let z = 'outer: loop {
let mut y = 1;
'inner: loop {
if y == 3 {
y += 1;
continue 'inner; // Skips to the next iteration of the 'inner loop
}
println!("x: {}, y: {}", x, y);
y += 1;
if y > 5 {
break 'outer y; // Breaks out of the 'inner loop
}
}
};
println!("z: {}", z);
}