从零开始的Rust生活:03-控制流与逻辑运算符

前言

作为一款合格的程序语言,基本的控制语句是必须有的,而对于Rust来说她的控制流语句相对于传统的语言来说都要更为丰富,本文将会大体地介绍Rust的各类控制语句及其的基本用法。

if

1
2
3
4
5
6
```rust
if condition {
// do something
}else{
// do something
}

match

说到了if,自然少不了我们的好朋友switch,不过非常喜闻乐见的是Rust并没有switch,取而代之的是功能强大的matchmatch作为Rust中著名的条件选择语句,它不止用于多条件的判断控制,它还经常出现于Option的判断等等各类None类型或者错误处理的场景。常见的match的使用场景如下

1
2
3
4
5
6
7
match(item){
condition_1 => //do something
condition_2 => {
//do something
}
_=> //do default thing
}

这里我们可以看到Rust的match语句支持单行或者多行的情况,其中多行的情况必须使用大括号包起来,同时match同样有一个_分支,这个分支一般是作为default分支存在。有一点非常重要,所有分支的返回值类型必须相同。

但是前面又提到了match相对于switch更为强大,所以这里我们将会探讨之所以match强大的原因

match可以作为表达式

在Rust中,match有一个非常常用的用法,在这种情况下所有的分支都必须要有返回值,就像这样

1
2
3
4
5
6
7
8
9
10
11
let s = match (item){
condition_1 => {
1
}
condition_2 => {
1 * 2
}
_=> {
3
}
}

在这种情况下各个代码块最终的执行后的返回值将会被赋给s

match的分支条件可以用于解包各类enum

上面也说到了match可以用于处理Option<T>类型,在Rust中我们可以这样用

1
2
3
4
5
6
7
8
9
10
11
let s = Some(5);

match(s){
Some(x) => {
println!("{}", x);
}
None => {
println!("is none");
}
}// 输出5

就像这样,Rust可以利用match语句轻松地解决Option<T>类型的问题。

后记

在写了四篇Rust的博客之后,我突然发现自己对Rust的理解非常的零散肤浅,所以从本篇开始《从零开始的Rust生活》系列将会暂时停更,待到我更加了解Rust后再继续进行更新。接下来本博客将会开始逐步更新本人的Rust学习记录,同步于本人的Rust的学习进程。


从零开始的Rust生活:03-控制流与逻辑运算符
http://anyin233.github.io/2020/11/27/Rust-03/
Author
anyin233
Posted on
November 27, 2020
Licensed under