Rust流程控制

1,790 阅读1分钟

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

流程控制结构

流程控制结构包括以下几种,除此之外还有其他几种会在后续的文章进行介绍。

  • if条件判断结构
  • loop循环
  • while循环
  • for..in迭代

条件控制

本文主要介绍Rust 中简单的控制流语句if else,至于match 会在后续的文章中进行讲解。

if表达式允许根据条件执行不同的代码分支,需要注意的是条件必须是bool类型,而bool类型又分为显式和隐式。但是在Rustif表达式的条件必须时bool值,条件不能是0 or null等。

if表达式中与条件相关联的代码块就叫做分支,可选的可以在后面加上一个else表达式,当if表达式后面的条件不成立时才会执行else之后的代码。

fn main() {
    let num = 3;
    if num < 5 {
        println!("num is {}", num)
    } else {
        println!("num is {}", num)
    }
}

同时if表达式可以结合else ifelse一起使用,else if可以有多个,而else至多只能有一个。

fn main() {
    let num = 15;
    if num % 2 == 0 {
        println!("能够被2整除")
    } else if num % 3 == 0{
        println!("能够被3整除")
    } else if num % 4 == 0{
        println!("能够被4整除")
    } else {
        println!("以上都不行")
    }
}

如果在一个程序中重复多次的使用了else if代码的可读性就会变得很差,建议使用match进行重构代码,match会在后续文章中进行介绍。

我们知道if是一个表达式,因在可以将它放在let语句中等号的右边。需要注意的是在整个if结构中,每返回的值的类型必须一致,因为rust是一门静态强类型语言,会在编译时推断变量的类型,因此就要求if表达式中每个可能成为结果的分支的返回值的类型必须是一致的。

fn main() {
    let num = true;
    let a = if num { 3 } else { 6 };
    println!("a is {}", a)
}

循环控制

Rust共提供了三种循环,分别时loop循环、while循环和for循环。

loop循环

loop关键字告诉Rust重复的执行一块代码,直到强制停止。强制停止的方式有两种,一种是在终端中使用ctrl+c,这种方式比较暴力,不建议使用;另一种方式就是在loop循环中使用break关键字告诉程序何时停止循环。

fn main() {
    let mut num = 5;

    let ret = loop {
        num -= 1;
        if num == 2 {
            break num
        }
    };
    println!("ret is {}", ret)
}

while条件循环

while条件循环时每次执行循环体代码之前都会判断一次条件,当条件成立时执行循环体代码,条件不成立时就会直接执行while循环之后的代码。

fn main() {
    let mut num = 5;
    while num != 0 {
        println!("num is {}", num);
        num -= 1;
    }
    println!("while 循环结束")
}

for循环

可以使用for循环来遍历集合,虽然可以使用while循环也可以做到但是易错而且效率低。使用for循环更加简介紧凑,可以针对集合中的每个元素来执行代码。由于for循环的安全和间接性,所以for循环在rust中使用最多。

// 使用while循环
fn main() {
    let arr = [1, 2, 3, 4, 5];
    let index = arr.len();
    let mut num = 0;
    while num < index {
        println!("{}", arr[num]);
        num += 1;
    }
}

// 使用for循环
fn main() {
    let arr = [1, 2, 3, 4, 5];
    for ele in arr.iter() {
        println!("{}", ele)
    }
}

如果想要像while循环一样根据条件执行若干次某段代码,就需要使用for + Range的组合了,Range是由标准库提供的,可以指定一个开始数字和结束数字,Range可以生成它们之间的数字,不包括结束数字,Rangerev方法可以反转Range

fn main() {
    for i in (1 ..4).rev() {
        println!("{}", i);
    } 
}

结语

文章首发于微信公众号程序媛小庄,同步于掘金

码字不易,转载请说明出处,走过路过的小伙伴们伸出可爱的小指头点个赞再走吧(╹▽╹)