Rust - 控制流

if 语句

每一门编程语言都包含的一个改变控制流程的部分,必然首当其冲的、必不可少的就是if语句了

与一些语言不同的是 Rust 的 if 语句条件必须为 bool 类型,像JavaScript 语言,它会将if后的值隐式转换为 bool 类型

fn main() {
    
    
    let num: i16 = 1024;
    if num < 1024 {
    
    
        println!("{}小于1024",num);
    } else if num > 1024 {
    
    
        println!("{}大于1024",num);
    } else {
    
    
        println!("{}等于1024",num);
    }
}
// 1024等于1024

我们还可以将if语句结果进行一个赋值(因为 if 语句是一个表达式),就像这样:

fn main() {
    
    
    let num: i16 = 1024;
    if num < 1024 {
    
    
        println!("{}小于1024",num);
    } else if num > 1024 {
    
    
        println!("{}大于1024",num);
    } else {
    
    
        println!("{}等于1024",num);
    }

    foo(num);
}
// 1024等于1024

fn foo(num: i16) {
    
    
    let foo_num = 
    if num < 1024 {
    
    
        num * 2
    } else if num > 1024 {
    
    
        num / 2
    } else {
    
    
        num + 1
    };

    println!("{}",foo_num);
}

我们在代码中只写了一个 else if 语句,如果实际情况需要我们使用一个以上的 else if 语句 ,那么我们最好使用 match 来重构代码

还有一个点是我们需要注意的,我们之前说过 if 语句是一个表达式,可以进行赋值给变量,这就出现了一个非常容易出错的点,那就是 Rust 是强类型语言,在编译时必须确定变量的数据类型,如果一个 if 语句的返回值是不同的数据类型,那么 Rust 会报错

// 错误示例
fn test(num: i16) {
    
    
    let test_var = 
    if num == 1024 {
    
    
        num
    } else {
    
    
        'N'
    };
    // `if` and `else` have incompatible types
}

报错


控制流-循环

Rust 控制流有三种循环,分别是 loop、while、for


loop循环

loop 关键字告诉 Rust 反复执行一块代码,持续到你 break 跳出循环,还可以使用 continue 跳过循环体的剩余部分并开始下一轮循环

fn main() {
    
    
    let mut num: i16 = 1000;
    loop {
    
    
        if num < 1024 {
    
    
            num = num + 1;
        } else {
    
    
            println!("{}",num);
            break;
        }
    }
}
// 1024

while 循环

while每次执行循环体之前都要进行一次条件判断

fn main() {
    
    
    let mut num:i16 = 1024;

    while num == 1024 {
    
    
        println!("{} - 节日快乐",num);
        num = num + 1;
    }

    println!("明天就是{}",num);
}

// 1024 - 节日快乐
// 明天就是1025

for循环迭代器

相对来说的话,使用for … in循环遍历集合更加安全简洁,使用loop以及while当然也可以遍历集合,但是相对来说容错率低、效率相对较差

fn main() {
    
    
    let arr: [i32;6] = [12,22,32,42,52,62];

    for item in arr.iter() {
    
    
        println!("{}",item);
    }
}

// 12
// 22
// 32
// 42
// 52
// 62

这里需要注意的是item是一个引用,而不是一个i32类型的值,相当于一个指针


Range

最后提一嘴这个标准库提供的Range类型,我们可以指定一个开始数字以及一个结束数字,Range即可生成他们之间的数字(不含结束位置)

fn main() {
    
    
    for item in (1..4).rev() {
    
    
        // rev():翻转Range
        println!("{}",item);
    }
}
// 3
// 2
// 1                                                                 

猜你喜欢

转载自blog.csdn.net/weixin_63836026/article/details/127500830