Rust 流程控制

开发中最常见的用来控制执行流的结构是判断和循环。

判断

Rust 中的 if 表达式允许根据条件执行不同的代码分支,提供一个条件并表示 "如果条件满足,运行这段代码;如果条件不满足,不运行这段代码。"

需要注意的是,Rust 是静态语言,因此无法自动将 int 之类的值转换为 bool , 也就是如下的代码会报错:

复制代码
fn main()
{
    let num : i32 = 6
    if num {
        println!("if 内")
    }

}

当然 "num == 6" 这种是允许的;并且如果条件只有一条语句的情况下,是可以不加括号的

Rust 的 if 也支持 else 的分支结构, 并且支持将 if 条件作为表达式使用,也就是 if 可以返回值 ,比如:

另外由于当一个判断有多个分支时,使用 else 会导致代码的杂乱,因此 Rust 提供了一种 match 分支结构,来避免这种问题;

match 是一种极为强大的控制流运算符,它允许开发者将一个值与一系列的模式相比较,并根据相匹配的模式执行相应代码。模式可由字面值、变量、通配符和许多其他内容构成;match 的力量来源于模式的表现力以及编译器检查,它确保了所有可能的情况都得到处理。

match 的使用方法是match 关键字后跟一个表达式,然后用大括号将要检测的所有值包起来,最后在判断的值之后用 => 运算符将值和匹配成功后将要运行的代码分开,最后在分支代码尾部加一个逗号分隔开,或是直接将整个分支也用大括号包起来。例如可以像这样写:

复制代码
fn main()
{
    let x : i32 = 1;
    match x {
        1 => {
            println!("x = 1")
        }
        2 => println!("x = 2"),
        _ => println!("x = 3"),
    }
}

看到这,第一反应就是这不就是 switch 吗,但其实还是有一些不同:

复制代码
* 在Rust中,match 是一个表达式,也就是它可以返回值。而在其他一些语言中,switch是一个语句,不能返回值。
* Rust 的 match 必须穷尽所有可能的情况,并且提供了 _ 通配符来表示未指定的情况。如果不满足任何一个模式,编译器将会发出警告。
* Rust 的 match 能够处理复杂的模式匹配,例如枚举类型、结构体以及嵌套模式。而其他一些语言中的switch仅能匹配基本数据类型。
* match 在 Rust 中使用 => 来关联模式和执行代码块,而其他语言中通常使用 : 或 -> 。
* Rust 的 match 不需要使用break之类的方式打断,匹配成功之后只会执行匹配到的分支的代码;

总的来说,Rust的match更加强大且安全,因为它是一个表达式,并且需要穷尽所有可能的情况。

这里其实想写个match 结构体的例子的,但是按照C++的方式定义结构体没写出来一堆报错。。。。等后面看到结构体和类再写吧。。。。

循环

Rust 中提供了三种循环关键字: loop while for

for 和 while 应该是绝大多数编程语言都有的关键字,用法也没什么特殊的,就不细述了,看例子就可以了:

loop 关键字会不停的执行代码直到明确要求停止,可以使用 break 关键字来告诉程序何时停止循环,并且 loop 也支持返回表达式,具体看下面的代码:

这段代码,首先在 loop 中不停的对 index 进行单步增长1的操作,然后增长之后判断当前是否已经增长到10,到10 就调用break 退出,同时返回当前值 * 101;

Rust 还有一个特性,如果存在嵌套循环,break 和 continue 只会应用于此时最内层的循环。此时可以选择在一个循环上指定一个 循环标签(loop label),然后将标签与 break 或 continue 一起使用,使这些关键字应用于标记的循环而不是最内层的循环。比如将刚才的代码改一下:

首先给最外层循环定义了一个标签 outloop,然后在内部循环中检测,如果index == 3 就中断内层循环,并返回index*101(这里返回值变量被我删掉了,所以这个返回值其实没有用)。 接下来再检测,如果当前外部循环索引变量到了2,就使用break 中断 outloop 这个循环,至此程序结束。

相关推荐
励志的小陈3 小时前
贪吃蛇(C语言实现,API)
c语言·开发语言
Makoto_Kimur3 小时前
java开发面试-AI Coding速成
java·开发语言
laowangpython3 小时前
Gurobi求解器Matlab安装配置教程
开发语言·其他·matlab
wengqidaifeng3 小时前
python启航:1.基础语法知识
开发语言·python
观北海3 小时前
Windows 平台 Python 极简 ORB-SLAM3 Demo,从零实现实时视觉定位
开发语言·python·动态规划
GetcharZp5 小时前
比 Zap 还要快?Go 社区高性能日志神器 Zerolog 落地实践指南
后端
Ulyanov5 小时前
《PySide6 GUI开发指南:QML核心与实践》 第二篇:QML语法精要——构建声明式UI的基础
java·开发语言·javascript·python·ui·gui·雷达电子对抗系统仿真
码界筑梦坊5 小时前
357-基于Java的大型商场应急预案管理系统
java·开发语言·毕业设计·知识分享
anzhxu5 小时前
Go基础之环境搭建
开发语言·后端·golang
刀法如飞6 小时前
一款Python语言Django框架DDD脚手架,适合中大型项目
后端·python·领域驱动设计