Rust结构化编程
大约 5 分钟
Rust结构化编程
条件判断
条件判断语句 | 说明 |
---|---|
if 语句 | if 语句用于模拟现实生活中的 如果…就… |
if...else 语句 | if...else 语句用于模拟 如果…就…否则… |
else...if 和嵌套if 语句 | 嵌套if 语句用于模拟 如果…就…如果…就… |
match 语句 | match 语句用于模拟现实生活中的 老师点名 或 银行叫 |
if 语句
if 条件表达式 {
// 条件表达式为true时要执行的逻辑
}
示例
let total:f32 = 666.00;
if total > 500.00 {
println!("打8折,{}",total*0.8)
}
// 输出 打8折,532.8
if …else 语句
if 条件表达式 {
// 如果 条件表达式 为真则执行这里的代码
} else {
// 如果 条件表达式 为假则执行这里的代码
}
示例
let total:f32 = 166.00;
if total > 500.00 {
println!("打8折,{}", total*0.8)
} else {
println!("无折扣优惠,{}", total)
}
输出 无折扣优惠,166
if…else if… else 语句
if 条件表达式1 {
// 当 条件表达式1 为 true 时要执行的语句
} else if 条件表达式2 {
// 当 条件表达式2 为 true 时要执行的语句
} else {
// 如果 条件表达式1 和 条件表达式2 都为 false 时要执行的语句
}
示例
let total:f32 = 366.00;
if total > 200.00 && total < 500.00 {
println!("打9折,{}",total*0.9)
} else if total > 500.00 {
println!("打8折,{}",total*0.9)
} else {
println!("无折扣优惠,{}",total)
}
// 输出 打9折,329.4
match 语句
Rust 中的 match 语句有返回值,它把 匹配值 后执行的最后一条语句的结果当作返回值。
语法
match variable_expression {
constant_expr1 => {
// 语句;
},
constant_expr2 => {
// 语句;
},
_ => {
// 默认
// 其它语句
}
};
示例
let code = "10010";
let choose = match code {
"10010" => "联通",
"10086" => "移动",
_ => "Unknown"
};
println!("选择 {}", choose); // 输出 选择 联通
let code = "80010";
let choose = match code {
"10010" => "联通",
"10086" => "移动",
_ => "Unknown"
};
println!("选择 {}", choose); // 输出 选择 Unknown
循环
现实中的循环很多,比如我们在学校操场里跑步,一圈一圈的跑。在计算机中,循环 其实就是一种重复,在满足指定的条件下,重复的做某些事情。
Rust 语言中也有三种表示 循环 的语句:
- loop 语句。一种重复执行且永远不会结束的循环。
- while 语句。一种在某些条件为真的情况下就会永远执行下去的循环。
- for in 语句。一种有确定次数的循环。
for in 循环
for 临时变量 in 左区间..右区间 {
// 执行业务逻辑
}
左区间..右区间,这是一个左闭右开的区间,1..5,那就只包含 1,2,3,4
for num in 1..5 {
println!("num is {}", num);
}
// 输出
num is 1
num is 2
num is 3
num is 4
可以使用 a..=b 表示两端都包含在内的范围。
for num in 1..=5 {
println!("num is {}", num);
}
// 输出
num is 1
num is 2
num is 3
num is 4
num is 5
for in 与迭代器
iter (集合不变)
在每次迭代中借用集合中的一个元素。这样集合本身不会被改变,循环之后仍可以使用。
let studyList = vec![
"《Go语言极简一本通》",
"Go语言微服务架构核心22讲",
"从0到Go语言微服务架构师",
];
for name in studyList.iter() {
match name {
&"从0到Go语言微服务架构师" => println!("恭喜你进阶到第三阶段-{}!", name),
_ => println!("学习: {}", name),
}
}
// 输出
学习: 《Go语言极简一本通》
学习: Go语言微服务架构核心22讲
恭喜你进阶到第三阶段-从0到Go语言微服务架构师!
into_iter (消耗集合)
会消耗集合。在每次迭代中,集合中的数据本身会被提供。一旦集合被消耗了,之后就无法再使用了,因为它已经在循环中被 “移除”(move)了。
let studyList2 = vec![
"《Go语言极简一本通》",
"Go语言微服务架构核心22讲",
"从0到Go语言微服务架构师",
];
for name in studyList2.into_iter() {
match name {
"从0到Go语言微服务架构师" => println!("恭喜你进阶到第三阶段-{}!", name),
_ => println!("学习: {}", name),
}
}
// 输出
学习: 《Go语言极简一本通》
学习: Go语言微服务架构核心22讲
恭喜你进阶到第三阶段-从0到Go语言微服务架构师!
iter_mut (集合可改)
可变地(mutably)借用集合中的每个元素,从而允许集合被就地修改。 就是停止本次执行剩下的语句,直接进入下一个循环。
let mut studyList3 = vec![
"《Go语言极简一本通》",
"Go语言微服务架构核心22讲",
"从0到Go语言微服务架构师",
];
for name in studyList3.iter_mut() {
*name = match name {
&mut "从0到Go语言微服务架构师" => {
"恭喜你进阶到第三阶段---从0到Go语言微服务架构师"
}
_ => *name,
}
}
println!("studyList3: {:?}", studyList3);
// 输出
studyList3: ["《Go语言极简一本通》", "Go语言微服务架构核心22讲", "恭喜你进阶到第三阶段---从0到Go语言微服务架构师"]
while 循环
while ( 条件表达式 ) {
// 执行业务逻辑
}
上面的条件表达式为真,就会执行 while 循环。
let mut num = 1;
while num < 20 {
println!("num is {}",num);
num= num*2;
}
// 输出
num is 1
num is 2
num is 4
num is 8
num is 16
loop 循环+break
loop {
// 执行业务逻辑
}
break; 中断的意思,就是跳出loop循环
示例
let mut num = 1;
loop {
if num > 20{
break;
}
println!("num is {}",num);
num = num*3;
}
// 输出
num is 1
num is 3
num is 9