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);
}
posted @ 2023-10-13 00:40  00lab  阅读(4)  评论(0编辑  收藏  举报