# 控制流

# if与else

if表达式允许你依据条件来执行不同的代码分支。

条件必须是bool类型的。

fn main() {
    let number = 6;

    if number % 4 == 0 {
        println!("number is divisible by 4");
    } else if number % 3 == 0 {
        println!("number is divisible by 3");
    } else if number % 2 == 0 {
        println!("number is divisible by 2");
    } else {
        println!("number is not divisible by 4, 3, or 2");
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14

从上向下执行那个在前面条件符合就输出,前者优先原则。

# 在let语句中使用if

因为if是一个表达式,所以可以将它放在let语句中 。

应为if是一个表达式,所以可以放在等号的右边。【代码案例如下:】

fn main() {
    let condition = true;
    
    // 块的最后一条语句
    let number = if condition { 5 } else { "six" };
    // 输出是 5
    println!("The value of number is: {}", number);
}

1
2
3
4
5
6
7
8
9

rust是一个强类型的语言,也是一个特别安全的语言。所以说在编译的时候就必须知道变量它的·类型是什么。方便于这个变量在其他地方可以合理是使用。

注意

在let语句中,使用if、else表达式里面可能成为结果的分支返回的类型必须是一样的。

# rust循环

loop、while、for

loop表达式

loop关键字告诉rust反复的执行一块代码,直到你喊停。(例子如下:)

fn main() {
    loop {
        println!("again!");
    }
}
1
2
3
4
5

上面的代码会一直循环下去,怎么停?

答:ctrl + c。使用break关键字来打断循环。

fn main() {
    let mut counter = 0;
    let result = loop {
        counter += 1;
        if counter == 10 {
            break counter * 2;
        }
    };
    println!("The result is {}", result);
}

1
2
3
4
5
6
7
8
9
10
11

while条件循环

每一次执行循环体之前都要判断一次条件。【while条件循环为这种模式而诞生!】

例子1

fn main() {
    let mut number = 3;
    while number != 0 {
        println!("{}!", number);

        number -= 1;
    }
    println!("LIFTOFF!!!");
}
1
2
3
4
5
6
7
8
9

# 使用for循环遍历集合

可以使用 while 或loop 来遍历集合,但是易错且低效。(例子)

fn main() {
    let a = [10, 20, 30, 40, 50];
    let mut index = 0;
   
    // 条件容易出错!长度越界遍历集合。
    while index < 5 {
        println!("the value is: {}", a[index]);
        index += 1;
    }
}
1
2
3
4
5
6
7
8
9
10

使用 for 循环更简洁紧凑,它可以针对集合中的每个元素来执行一些代码。

fn main() {
    let a = [10, 20, 30, 40, 50];
    for element in a {
        // 输出元素。
        println!("the value is: {}", element);
    }
}
1
2
3
4
5
6
7

element 是直接引用这个元素,可以先理解为一个指针!

# Range是什么?

答:标准库提供。

  1. 定一个开始数字和一个结束数字,Range可以生成它们之间的数字(不含结束)。
  2. rev 方法可以反转 Range。
fn main() {
    for number in (1..4).rev() {
        println!("{}!", number);
    }
    println!("LIFTOFF!!!");
}
1
2
3
4
5
6

# 总结控制流

for循环遍历集合又安全又快速。首先索引不会出错,其次在每一次遍历的时候我们不需要检查一些条件。这样就执行速度就更加块了。

for循环在rust用的最多的。

Last Updated: 1/12/2025, 10:40:30 AM