06_rust的控制流表达式
控制流表达式
if表达式
if表达式用于根据条件执行不同代码分支,条件必须是bool类型。
- if表达式中,与条件关联的代码块叫分支(arm)。
- 可选择是否加上else表达式。
fn main() {
let num = 3;
if num < 6 {
println!("arm num < 6");
} else {
println!("arm else");
}
// 第二个例子
let num2 = 6;
if num2 % 5 == 0 {
println!("num div by 5");
} else if num2 % 3 == 0 { // 首先被匹配上,走这分支
println!("num div by 3");
} else if num2 % 2 == 0 {
println!("num div by 2");
} else {
println!("arm else");
}
}
使用else if处理多重条件:如果使用了多于一个else if,可使用match来重构代码。
let语句中使用if
if是一个表达式,可用let语句中等号的右边。
let xx = true;
let num = if xx { 5 } else { 6 };
let num = if xx { 5 } else { "6" }; // 编译报错,num的类型存在二义性
rust循环:loop、while、for
loop循环
loop关键字控制反复执行其随后的代码块,直到手动退出。可用break关键字跳出loop循环。
let mut cnt = 0;
let ret = loop {
cnt += 1;
if cnt == 10 {
break cnt * 2;
} // 结束时ret=20
}
while条件循环
每次执行循环体之前,都会判断一次条件是否满足,满足才进入循环体代码块。
let mut cnt = 0;
while cnt != 0 {
cnt = cnt - 1;
}
println!("after while")
另一个遍历集合
let a = [10, 20, 30];
let mut ind = 0;
while ind < 3 {
println!("in while {}", a[ind]);
ind = ind + 1;
}
for循环
使用while、loop遍历集合易错且低效,更适合使用for循环。
特点:简介紧凑,可针对集合中每个元素执行一些代码。
// 代码比上面while循环简洁
let a = [10, 20, 30];
for elem in a.iter() { // elem变量类型时&i32,指针引用
println!("in for {}", elem);
}
使用for循环,不用每次检查条件,速度更快,同时无溢出风险。
因for循环的安全、简洁性,在rust里用的最多。
Range
由标准库提供,指定一开始数字和一结束数字,Range可生成其之间的数字(不含结束数字)。rev方法可反转Range。
for num in (1...4).rev() { // (1...4)就是一个Range, (1...4).rev()产生一个数列表 3, 2, 1
println!("in for {}", num);
}