Rust之流程控制

Rust学习教程19 - 流程控制 流程控制 80后应该都对学校的小混混记忆犹新,在那个时代,小混混们往往都认为自己是地下王者,管控着地下事务的流程,在我看来,他们就像代码中的流程控制一样,无处不在,很显眼,但是又让人懒得重视。 言归正传,Rust程序是从上而下顺序执行的,在此过程中,我们可以引入循环、分支等流程控制方式,帮助我们的代码更好的实现相应的功能。 使用if来做分支控制 if else无处不在 - 鲁迅说 但凡你能找到一门编程语言没有if else,那么一定更要反馈给鲁迅,反正不是我说的:) 总之,只要你拥有其它语言的编程经验, 阅读详情

开发环境

  • Windows 10
  • Rust 1.53.0

  • VS Code 1.58.2 

 

项目工程

这里继续沿用上次工程rust-demo

Rust的流程控制

在大多数编程语言中,决定是否运行某些代码取决于条件是否为真,并决定在条件为真时重复运行一些代码。让编码者控制Rust代码执行流程的最常见构造是if表达式和循环。

条件语句

if表达式

if表达式允许编码者根据条件将代码分支。提供一个条件,然后状态,“如果满足此条件,请运行此代码块。如果条件未满足,请不要运行此代码块。”

在工程目录中创建一个名为分支的新项目,以探索if表达式。示例如下:

fn main() {
    let number = 3;

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

所有if表达式都以关键字if开头,后面跟着一个条件。

另外,我们还可以包括一个其他表达式,我们选择在这里这样做,以便在条件计算为false时给程序一个可选的代码块来执行。如果不提供其他表达式,且条件为false,则程序将跳过if块,然后转到下一段代码。

我们运行上述代码。

cargo run

结果:

 如果修改代码:

​
fn main() {
    let number = 7;

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

再运行

 if...else if表达式

也可以通过将if和else组合到一个else if表达式中,从而具有多个条件。

示例如下:

fn main() {
    let number = 6;

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

运行结果:

 

在let语句中使用if

因为如果是表达式,我们可以在let语句的右侧使用它。示例如下:

fn main() {
    let condition = true;
    // if后面判断condition的值,如果为真,则number为5,否则为6
    let number = if condition { 5 } else { 6 };

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

运行结果:

如果将上述代码修改为:

fn main() {
    let condition = true;

    // 编译时这里会报错,不同数据类型做判断
    let number = if condition { 5 } else { "six" };

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

运行

 if代码块中的表达式计算为整数,其他块中的表达式计算为字符串。这不起作用,因为变量必须只有一个类型,Rust需要在编译时知道数字变量是什么类型,所以它可以在编译时验证它的类型是否有效,无论我们在哪里使用数字。如果只有在运行时才确定数字的类型,Rust就无法做到这一点;编译器将更加复杂,如果它必须跟踪任何变量的多个假设类型,那么对代码的保证就会更少。

循环

多次执行代码块通常是有用的。对于这个任务,Rust提供了几个循环。循环通过循环体内的代码一直运行到末尾,然后在开始时立即返回。

Rust有三种循环:loop,while,和for。

loop循环

loop关键字告诉Rust一次又一次地执行一段代码,或者直到您显式地告诉它停止。

示例:

fn main() {
    // 循环loop
    loop {
        println!("again!");
    }
}

 运行

当我们运行这个程序时,我们看到again!一遍又一遍地打印,直到我们手动停止程序。大多数终端支持键盘快捷键ctrl-c来中断处于连续循环中的程序。

符号^C表示按ctrl-c的位置。你可能会也可能不会再看到这个词!打印在^C之后,这取决于它接收中断信号时循环中代码的位置。 

幸运的是,Rust提供了另一种更可靠的方法来打破循环。您可以在循环中放置break关键字,以告诉程序何时停止执行循环。

break语句

loop的一个用途是重试您知道可能失败的操作,例如检查线程是否已完成其任务。但是,您可能需要将该操作的结果传递给您的其余代码。为此,您可以在停止循环的break表达式之后添加希望返回的值;该值将从循环中返回,以便您可以使用它。示例:

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;

        // break表达式,当counter值为10的时候,将counter乘2的值赋值给result,退出循环
        if counter == 10 {
            break counter * 2;
        }
    };

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

 运行

 条件循环while

对于程序来说,评估循环中的条件通常是有用的。条件为真时,循环运行。当情况不再真实时,程序调用break,停止循环。这个循环类型可以使用组合来实现loop,if,else和break。

然而,这种模式非常常见,以至于Rust有一个内置的语言构造,称为while循环。示例:

fn main() {
    let mut number = 3;

    // while循环
    while number != 0 {
        println!("{}!", number);

        number -= 1;
    }

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

这个构造消除了很多嵌套,如果您使用loop,if、else和break,那么嵌套就更清楚了。当条件保持为真时,代码就会运行;否则,它退出循环。

下面我们看while循环的另一个示例。

fn main() {
    // 定义数组
    let a = [10, 20, 30, 40, 50];
    // 数组下标
    let mut index = 0;

    // while循环
    while index < 5 {
        // 打印数组中的元素值
        println!("the value is: {}", a[index]);

        index += 1;
    }
}

运行结果

 但是这种方法容易出错;如果索引长度不正确,我们可能会引起程序的恐慌。这也很慢,因为编译器添加了运行时代码,以便在循环中对每个迭代中的每个元素执行条件检查。

for循环

作为一种更简洁的选择,可以使用for循环并对集合中的每个项执行一些代码。

可以将上述代码修改为:

fn main() {
    let a = [10, 20, 30, 40, 50];

    // for循环
    for element in a.iter() {
        println!("the value is: {}", element);
    }
}

运行结果

 运行结果和while循环的代码结果一致。更重要的是,我们现在已经提高了代码的安全性,并且消除了错误的可能性,这些错误可能是因为超出数组的末尾而导致的,或者是不够远的,并且丢失了一些项。

for循环的安全性和简洁性使其成为Rust中最常用的循环结构。Rust中,个人推荐使用for循环。这样做的方法是使用一个range,它是由标准库提供的一种类型,它按顺序从一个数字开始生成所有数字,在另一个数字之前结束。

for循环的另一个示例:

fn main() {
    // 反序输出1到4中的元素:3,2,1
    for number in (1..4).rev() {
        println!("{}!", number);
    }
    println!("LIFTOFF!!!");
}

运行结果

 本章重点

  • 条件判断:if,if...else,if...else if...else
  • 循环:loop,while,for
reCAPTCHA v3隐形验证码实战:5分钟教你用Capsolver获取0.9高分令牌 本文提供了一份reCAPTCHA v3隐形验证码的实战指南,详细解析其浏览器评分机制,并手把手教你使用Capsolver自动化获取0.9高分令牌。内容涵盖从环境侦察、关键参数(sitekey与pageAction)提取,到API调用、结果轮询及令牌使用的完整流程,旨在帮助开发者高效绕过自动化交互障碍。 阅读详情

相关推荐

基于YOLO+DeepSeek的农作物病虫害检测系统

本系统是一个基于YOLO+DeepSeek的农作物病虫害检测系统。 可使用YOLOV1-YOLOV12的任意模型进行目标检测。可以实现检测图片、批量检测图片、视频检测、摄像头检测四种方式。

qq_51977316的博客 1809

rust 用steamcmd命令_Rust 的命令行应用

Rust 中的命令行应用程序Rust 是一种静态编译的快速语言,具有强大的工具和快速增长的生态系统。这使得它非常适合编写命令行应用程序:因为它们本就该是小型的、可移植的和快速运行的。命令行应用程序也是开始学习 Rust 的一个很好的方法;或者向您的团队介绍 Rust!对于初学者来说,用简单的命令行界面(CLI)编写一个程序,会是一个很好的练习,因为他们对该语言还不太熟悉,而这,能开始对它有一种感觉...

weixin_39845825的博客 2594

保姆级教程:在Ubuntu 22.04上搞定PX4 V1.14 + ROS2 Humble的HITL仿真(避坑实录)

本文提供在Ubuntu 22.04上配置PX4 V1.14与ROS2 Humble的HITL仿真环境的详细教程,涵盖环境准备、固件编译、QGroundControl配置、ROS2通信设置及联调测试。特别针对版本兼容性、Gazebo插件构建和MicroDDS配置等常见问题提供避坑指南,帮助开发者高效搭建无人机仿真系统。

weixin_30836759的博客 1001

Rust个人学习之Rust的循环

对于数组遍历,for循环是比较适用的,由于while和for与其他语言比较类似,此处就不再扩展,不过Rust的风格上我是比较喜欢的,类似python、golang的风格。仅从代码行数就能看出来,实现上述相同的功能,while显得更优雅一点,或者说while更适合通过条件表达式控制循环的情况。从结果也可以看出,当num等于五后 就退出了loop,打印了“LOOP FINISH!首先聊聊loop,loop的主要作用是循环某段代码段,使用方法如下。其中打印loop test这条代码会无限循环,运行结果如下。

minibrid的分享页 785

Redis【实战篇】---- 分布式锁-redission

重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。不可重试:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。

是微风,是晚霞,是无可替代 1万+

StarRocks FE启动异常

服务器断电,StarRocks FE 启动失败。

qq_15138049的博客 1112

【Rust日报】ArkFlow:高性能Rust流处理引擎

原文:https://blog.rust-lang.org/inside-rust/2025/03/17/leadership-council-update.html。Github 仓库:https://zellij.dev/news/stacked-resize-pinned-panes/:除项目管理岗位外,探讨为项目内部基础设施提供资金支持,但面临对项目成员需求了解不足、资金融入项目避免增加负担等问题。高性能Rust流处理引擎,提供强大的数据流处理能力,支持多种输入输出源和处理器。

Rust语言学习交流 1055

最大似然估计、梯度下降、EM算法、坐标上升

主要讲解的是机器学习中参数学习算法之间的区别,以及应用的场景。 最大似然估计: 其中目标函数是对数似然函数。为了求目标函数取最大值时的theta。有两个关机键步骤,第一个是对目标函数进行求导,第二个是另导数等于0,求解后直接得到最优theta。两个步骤缺一不可。 梯度下降: 对目标函数进行求导,利用导函数提供的梯度信息,使参数往梯度下降最快的方向移动一小步,来更新参数。为什

tzl2093的博客 5141

Layer 2:工作流执行引擎——ComfyUI 的核心逻辑,Rust 实现

执行引擎的异步运行时基于 Tokio,充分利用 Rust 的无 GIL 原生并发特性,多个节点可以真正并行执行——这是 Python 版 ComfyUI 的 asyncio 无法做到的。

pj9iH974y的博客 272

从零构建锂电池主动均衡系统:Simulink仿真中的Buck-Boost拓扑实战指南

本文详细介绍了如何在Simulink中从零构建基于Buck-Boost拓扑的锂电池主动均衡系统。通过仿真环境搭建、参数优化、控制策略设计和性能评估,为工程师提供了完整的实战指南,帮助快速验证和优化均衡算法,提升电池组一致性与寿命。

gitlab7runner的博客 896

C++大牛的博客

1. C++大牛的博客     Bjarne Stroustrup的博客: Bjarne Stroustrup’s Homepage Bjarne Stroustrup,不认识的可以去面壁了,没有他,就没有我们现在的饭碗。Bjarne Stroustrup是丹麦人,目前任教于TAMU。他的Homepage和他的书籍The C++ Programming Language一样

程序猿老樊的博客 6244

探索Rust模板引擎与页面渲染技术:构建高性能Web应用

本文深入探讨了Rust编程语言中的数据结构和算法优化,阐述了如何通过选择合适的数据结本文介绍了Rust编程语言中的模板引擎和页面渲染技术,重点讲解了Tera模板引擎的使用和`render!`宏的应用。通过实际案例,我们了解了如何在Rust中实现模板继承、数据处理安全性和性能优化等进阶构、运用算法优化技巧、利用所有权和借用机制、使用traits和泛型、以及枚举和模式匹配等方法,来提高Rust程序的性能。文章旨在帮助读者理解并掌握Rust编程中数据结构和算法优化的核心概念,以编写出既高效又可维护的Rust代码。

silenceallat的博客 1416

39、高频 LLC 谐振转换控制系统动态优化算法分析与研究

本文针对高频下LLC谐振转换器动态性能差的问题,提出一种基于谐振电容器充放电估计动态切换时间的优化控制算法。通过改进状态轨迹控制方法,突破传统算法在谐振频率与开关频率相等条件下的限制,并结合新型采样策略有效抑制电压过冲。算法在MATLAB和SABER中完成仿真验证,并搭建基于STM32F407的原型系统进行测试,结果表明该方法显著缩短动态响应时间,提升系统稳定性。研究为高频、高功率密度开关电源的动态优化提供了可行解决方案。

linux6sysadmin的博客 111

rust流程控制

本章内容不少:你学习了变量、标量和复合数据类型、函数、注释、if表达式和循环!实现华氏度与摄氏度的相互转换。生成第 n 个斐波那契数。利用歌曲中的重复结构打印圣诞颂歌《圣诞十二日》的歌词。准备好后,我们将讨论 Rust 中其他语言不常见的概念:所有权。

qq_29372275的博客 971

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Rust练习】14.流程控制

练习题来自:https://practice-zh.course.rs/flow-control.html。

矢车菊二十七号 1485

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Rust 流程控制学习教程

分支控制if-else是唯一的分支结构,条件必须是bool类型,且支持作为表达式返回值(替代三元运算符)。循环控制loop:无限循环,需用break终止,支持返回值。while:条件循环,适合“已知终止条件,未知次数”。for:遍历循环,优先用于集合/迭代器,安全简洁(避免索引越界)。控制开关break终止循环,continue跳过当前轮次。

目前专注区块链相关技术的学习与分享 926

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【一起学Rust | 基础篇】rust函数与流程控制详解

在之前的学习中,你已经见过Rust中最重要的一个函数——main,他是一个程序的入口函数。本节我们将详细的讲解Rust中的函数和流程控制的部分内容,学习完本期内容,你的代码就会更加丰富。我们在Rust中通过输入fn后面跟着函数名和一对圆括号来定义函数。大括号告诉编译器哪里是函数体的开始和结尾。一个无参函数的结构如下}花括号里面包着的,我们称之为——作用域。以上就是本期的所有内容。本期主要讲了两部分内容,分别是rust的函数和流程控制。...

专注Rust编程与技术分享,涵盖C++、Python等开发实战,新手友好,专注实战,助力编程成长。 10万+

Rust 的流程控制与函数

本文介绍了Rust编程语言中的流程控制与函数相关知识。主要内容包括:条件判断(if-else、iflet模式匹配)、三种循环结构(loop、while、for)、函数的定义与调用(参数、返回值、函数指针)以及函数的高级特性(默认参数模拟、可变参数实现和递归函数)。此外还讲解了代码块作用域规则和变量遮蔽特性。文章通过丰富的代码示例详细展示了各语法特性的使用方法,帮助读者掌握Rust中流程控制与函数编程的核心概念。

北京锋通科技有限公司的技术blog 973

Rust 入门 流程控制 (九)

Rust程序是从上而下顺序执行的, 在此过程中,我们可以通过循环、分支等流程控制的方式,更好的实现相应的功能,

m0_48050264的博客 1060

Rust - 流程控制、函数

概述 这篇是学习Rust的第二篇博客,在所有的编程语言里都离不开流程控制的模块,流程控制的模块包括条件语句和循环两部分。 rust初试 - 安装环境、基本类型 if else Rust的if的布尔条件不用括号括起来。if所有分支返回的类型必须相同。 fn main() { let number = 3; if number < 5 { println!("条件为 true"); } else { println!("条件为 false");

stark张宇 833

Rust流程控制

while循环在每次执行代码前进行条件判断,只要条件表达式的值为true就会重复执行代码。可以将if let 视为match的语法糖,仅当匹配某一模式时执行代码,并忽略其他所有模式。while let 后紧跟的表达式中,左侧为匹配模式,右侧为要匹配的值,两者通过=分隔。Rust 要求match模式匹配是穷尽式的,即必须穷举所有的可能,否则会导致程序错误。for循环使用for …没有循环条件,无限次重复执行一段代码,直到调用break 退出循环。每一个模式都是一个分支,程序根据匹配的模式执行相应的代码。

wkk的博客 482

Rust 语言基础—流程控制

Rust 语言基础 五、流程控制 Rust 语言也有三种流程结构:顺序结构、选择结构和循环结构。 1、选择结构 选择结构,通过使用关键字 if 或 if…else、if…else if…else 加上条件语句来实现。 1.1、单分支选择结构 单分支选择结构,通过使用 if 关键字及条件语句实现,如下例子: fn main() { if_test(18); if_tes...

御承扬的博客 954

rust语言流程控制

rust代码是从上至下顺序执行的,在这个过程中,可以通过循环,分支等流程控制方式来实现相应的逻辑。

zy010101博客 982

2024 Rust现代实用教程 流程控制与函数

函数的代码本身通常是存储在可执行文件的代码段,而在调用时函数会在栈,开辟一个新的stack frame(栈空间),用于存储函数的局部变量、参数和返回地址等信息,而当函数结束后会释放该空间。而当传入non-Copy value(Vec、String等)传入函数时,实参会转移value的所有权给形参,实参会失去value的所有权而在函数结束时,value的所有权会释放。1.函数的定义:在Rust中,你可以使用fn关键字声明和定义函数,而main是程序的入口点是一种特殊的函数。

喜欢打篮球的普通人 1009

Rust流程控制(上):if_else与match模式匹配

程序的核心在于执行逻辑和做出决策。一个程序如果只能从头到尾顺序执行一系列指令,其能力将受到极大限制。为了构建能够响应不同输入、处理不同状态的复杂应用,我们需要流程控制(Control Flow) 机制。流程控制允许我们根据特定条件来决定执行哪些代码块,或者重复执行某些代码块。Rust提供了一系列强大而富有表现力的流程控制工具。与其他许多语言一样,它拥有基于条件判断的结构和用于重复执行的循环(、、)。但更重要的是,Rust还提供了一个极其强大和灵活的工具——表达式,它将模式匹配(Pattern Matchin

haolove527的专栏 1112

RUST 学习日记 第17课 ——流程控制

<h3 id="rust--学习日记-第17课-流程控制">RUST 学习日记 第17课 ——流程控制</h3> <hr> <p><img src="https://gitee.com/haoyu3

我是小学生的博客 367
上一篇: Rust之注释
下一篇: Rust之所有权(一):所有权
枫★曦
博客等级 码龄19年 251粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值