WenjieWei Blog
open main menu
Part of series:Rust-Basic

Rust 基础入门 - 第四章

/ 4 min read

流程控制的地位不多说,Rust 中是从上而下执行的。

IF- 分支控制

if-else 语句的语法如下:


fn main() {
    let condition = true;
    let number = if condition {
        5
    } else {
        6
    };

    println!("The value of number is: {}", number);
}

有两个注意点:

  1. if-else 语句的返回值是一个表达式,所以可以直接赋值给一个变量。
  2. if-else 语句的返回值必须是相同的类型,否则会报错。

ELSE-IF 多重条件分支

不多上,直接上:

fn main() {
    let n = 6;

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

很简单,自上而下判断分支,判断到满足条件的分支就执行,不再继续判断。

FOR 循环

简明的语法,和 JS 有点像:


// 1.
for item in collection {
    // do something
}

// 2.

for item in IntoIterator::into_iter(collection) {
    // do something
}

// 1 和 2 两种方式等价

对于集合对象,一般使用引用形式,如果不是的话,所有权就会被 move 到循环体内,导致循环体外的对象无法使用。

// 1.
for item in &collection {
  // ...
}
// 2.
for item in collection.iter() {
  // ...
}

// 1 和 2 两种方式等价

如果要在循环中修改集合中的元素,可以使用 mut 关键字:

// 1.
for item in &mut collection {
  // ...
}
// 2.
for item in collection.iter_mut() {
  // ...
}

// 1 和 2 两种方式等价

在循环中获取索引,可以使用 enumerate 方法:

fn main() {
    let a = [4, 3, 2, 1];
    for (i, v) in a.iter().enumerate() {
        println!(" 第 {} 个元素是{}", i + 1, v);
    }
}

对于不想在循环体中使用的变量,可以用 _ 来代替,编译器会自动忽略:

for _ in 0..10 {
    println!("Hello, world!");
}

WHILE 循环

当条件为 true 时,一直执行循环体,直到条件为 false 时,退出循环。


fn main() {
    let mut n = 0;

    while n <= 5  {
        println!("{}!", n);

        n = n + 1;
    }

    println!("LIFTOFF!!!");
}

LOOP 和 BREAK

loop 是一个简单的无限循环,在内部实现逻辑中,可以使用 break 来跳出循环。

fn main() {
    let mut counter = 0;

    let result = loop {  // loop 返回值是一个表达式
        counter += 1;

        if counter == 10 {
            break counter * 2;  // break 返回值
        }
    };

    println!("The result is {}", result);
}

逻辑很简单,注意点在于:

  1. break 既可以跳出循环,也可以返回值。
  2. loop 的返回值是一个表达式,所以可以直接赋值给一个变量。

参考资料