Rust 中的控制流:掌握条件语句和循环

本文介绍了 Rust 语言中的控制流,包括 if 表达式和循环结构(loopwhilefor)。if 表达式用于条件判断,循环结构则用于重复执行代码块。文章通过代码示例详细讲解了各种控制流的使用方法,如 else if 处理多重条件、breakcontinue 控制循环流程以及循环标签在嵌套循环中的应用。

在 Rust 中,控制流是一个强大的特性,可以让你决定运行哪些代码以及何时运行它们。无论是基于特定条件执行代码块,还是多次重复代码,控制流都能为你提供构建灵活且智能的程序所需的工具。本文将引导你了解 Rust 中的核心控制流结构——if 表达式和循环。

if 表达式:做出决策

if 表达式允许你仅在特定条件为真时执行代码。

例如:

fn main() {
    let number = 3;

    if number < 5 {
        println!("condition was true"); // 条件为真
    } else {
        println!("condition was false"); // 条件为假
    }
}

  • 条件必须计算为 布尔( bool ) 值。
  • Rust 不会强制转换其他类型(如整数)为布尔值——这与 JavaScript 或 Ruby 等语言不同。

不正确的使用示例:

else if 用于处理多个条件

你可以使用 else if 处理多个可能的条件:

fn main() {
    let number = 6;

    if number % 4 == 0 {
        println!("divisible by 4"); // 能被 4 整除
    } else if number % 3 == 0 {
        println!("divisible by 3"); // 能被 3 整除
    } else if number % 2 == 0 {
        println!("divisible by 2"); // 能被 2 整除
    } else {
        println!("not divisible by 4, 3, or 2"); // 不能被 4、3 或 2 整除
    }
}

发生了什么:

  • a == b 检查 a 的值是否等于 b 的值。
  • 如果为真,则运行 if 代码块。

重要说明:

  • == 不是赋值。(那是 =,用于设置值。)
  • 对于自定义类型,只有当类型实现了 PartialEq trait(在 Rust 中)时,使用 == 的相等性比较才有效。

循环重复

Rust 提供了三种类型的循环:

  1. loop
  2. while
  3. for

使用 loop 进行无限循环

fn main() {
    loop {
        println!("again!"); // 再次!
    }
}

结果显示存在 “again” 的无限循环。 我必须取消它才能终止循环。

使用 break 退出,或使用 continue 跳到下一次迭代。

返回值:

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;
        if counter == 10 {
            break counter * 2;
        }
    };

    println!("The result is {result}"); // 结果是 {result}
}

2. 嵌套循环的循环标签

在 Rust 中使用嵌套循环时,默认情况下,breakcontinue 只会影响它们出现的最内层循环。 但是 Rust 为你提供了一个强大的工具来控制更复杂的流程:循环标签

什么是循环标签?

循环标签是你分配给特定循环的名称,以便你可以精确地控制 breakcontinue 应用于哪个循环——即使在深度嵌套的循环中也是如此。

  • 标签以单引号 (') 开头,后跟标签名称。
  • 你将其放置在 loopwhilefor 关键字之前。
  • 然后,你可以使用 break 'labelcontinue 'label 来专门影响该循环。

示例:带有标签的嵌套循环

fn main() {
    let mut count = 0;

    'counting_up: loop {
        println!("count = {count}"); // count = {count}
        let mut remaining = 10;

        loop {
            println!("remaining = {remaining}"); // remaining = {remaining}

            if remaining == 9 {
                break; // exits the *inner* loop only // 仅退出*内部*循环
            }

            if count == 2 {
                break 'counting_up; // exits the *outer* loop // 退出*外部*循环
            }

            remaining -= 1;
        }

        count += 1;
    }

    println!("End count = {count}"); // 结束计数 = {count}
}

结果

没有标签

如果我们只使用 break 而不是 break 'counting_up,则只会退出内部循环,而外部循环将继续运行

何时使用循环标签

在以下情况下使用循环标签:

  • 你有多个嵌套循环,并且
  • 你想从内部循环中中断或继续外部循环

并非每个嵌套循环都需要它们,但是当控制流变得复杂时,它们有助于消除歧义提高可读性

  • 原文链接: medium.com/@estheraladio...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
estheraladioche569
estheraladioche569
江湖只有他的大名,没有他的介绍。