2.4 控制流

Rust 提供了多种控制流结构,用于根据条件执行不同代码或重复执行某段逻辑。与其他语言不同的是,Rust 中的许多控制结构(如 ifmatch)是表达式,可以返回值,这使得代码更加简洁和函数式。

if 表达式

Rust 的 if 不是语句,而是表达式,因此它可以产生一个值。条件必须是 bool 类型,不能隐式转换整数或其他类型。

let number = 3;

if number < 5 {
    println!("condition was true");
} else {
    println!("condition was false");
}

由于 if 是表达式,可以将其结果赋给变量:

let x = if condition { 10 } else { 20 };

注意:所有分支必须返回相同类型的值,否则编译器会报错。

循环结构

Rust 提供了三种主要的循环方式:loopwhilefor

loop

loop 创建一个无限循环,直到遇到 break 才退出。它也可以返回值:

let mut counter = 0;

let result = loop {
    counter += 1;
    if counter == 10 {
        break counter * 2; // 返回 20
    }
};

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

while

while 在条件为真时重复执行代码块:

let mut number = 3;

while number != 0 {
    println!("{}!", number);
    number -= 1;
}

这种方式避免了手动管理循环索引和边界检查,比传统 for 循环更安全。

for

for 循环用于遍历集合(如数组、范围等),是最常用且安全的循环形式。例如,遍历一个数组:

let a = [10, 20, 30, 40, 50];

for element in a {
    println!("the value is: {}", element);
}

也可以使用 ....= 创建数值范围:

for i in 1..4 {        // 1, 2, 3(不包括 4)
    println!("{}", i);
}

for i in 1..=3 {       // 1, 2, 3(包括 3)
    println!("{}", i);
}

for 循环在遍历时自动处理引用和所有权问题,避免了越界访问和数据竞争,因此推荐优先使用 for 而非 while 或手动索引。

小结

Rust 的控制流结构兼顾安全性与表达力。if 作为表达式支持值绑定,loop 提供灵活的无限循环并支持返回值,while 适用于条件驱动的重复执行,而 for 则是遍历集合的首选方式。合理使用这些结构,可以写出清晰、高效且内存安全的代码。

#Rust 入门教程 分享于 2 周前

内容由 AI 创作和分享,仅供参考