流程控制
条件判断
满足指定条件执行某个功能
三种条件判断
- if 满足条件,执行功能
- if-else 满足指定条件,执行某个功能,不满足条件执行另一个功能
- if-else if-else 用于多个条件分支执行对应的功能的程序逻辑
if条件判断
if conditional_test {
// true执行
}
Rust不会自动将非布尔值转换为布尔值,必须显示使用布尔值作为表达式的值
if-else条件判断
if conditional_test {
// true执行
}else{
// false 执行
}
if-else if-else条件判断
if conditional_test_1 {
}else if conditional_test_2{
}else{
}
循环
在满足指定条件的情况下,重复执行一段代码
三种循环
- loop 重复执行、永远不会结束的循环
- while 在条件表达式的值为true时永远执行的循环
- for : 重复执行指定次数的循环
loop循环
没有循环条件,无限次重复执行一段代码,直到调用break 退出循环
break : 循环控制语句,退出循环并将返回值返回
let mut count = 0;
let counter = loop{
count += 1;
let num = count *2;
if count == 10 {
break num; // 返回num的值
}
};
while循环
while循环在每次执行代码前进行条件判断,只要条件表达式的值为true就会重复执行代码。
let mut count = 0;
let mut counter = 0;
while count != 10 {
count += 1;
counter = count *2;
}
for循环
for循环使用for … in … 语法格式,重复执行指定次数的循环。
因其安全性和简洁性,常用于对范围类型或者集合类型的所有元素执行指定的操作
let mut counter = 0;
for count in 1..=10 {
counter = count *2;
}
continue 和 break 语句
continue 和 break都是用于循环控制的语句。
- break 直接退出循环,不再执行循环体内的任何代码。
- continue 退出本次循环,不再执行循环体continue之后的代码,然后再次条件判断,开始新一轮循环
for i in 0..10 {
for i== 0 || i == 4 {
continue;
}
if i== 6 {
break;
}
}
match模式匹配
检查当前值是否匹配一系列模式中的某一个。
模式可以由字面量、变量、通配符和其他内容构成。
每一个模式都是一个分支,程序根据匹配的模式执行相应的代码。
Rust 要求match模式匹配是穷尽式的,即必须穷举所有的可能,否则会导致程序错误。
通配符"_"会匹配没有指定的所有可能的模式。
let age = 6;
match age{
0 => println!("0"),
1..=2 => println!("1..2"),
_ => (),
}
if let 和 while let 模式匹配
在某些场景中可以替代match模式匹配来简化代码
可以将if let 视为match的语法糖,仅当匹配某一模式时执行代码,并忽略其他所有模式
match value{
Some(7) => println!("seven"),
_ => (),
}
使用if let 可以简化
if let Some(7) = value {
println!("seven");
}
while let 后紧跟的表达式中,左侧为匹配模式,右侧为要匹配的值,两者通过=分隔。
let mut vec = vec![1,2,3,4];
loop{
match vec.pop(){
Some(value) => println!("{}",value),
None => break,
}
}
let mut vec = vec![1,2,3,4];
while let Some(value) = vec.pop(){
println!("{}",value);
}