写点什么

Rust 从 0 到 1- 基础概念 - 控制流

用户头像
关注
发布于: 2021 年 03 月 31 日
Rust从0到1-基础概念-控制流

控制流语句里,我们最常用到的就是 if...else... 和循环,Rust 语言里目前没有 switch 语句。

if 表达式

和 C 或 Java 不同,Rust 的条件表达式不需要用小括号包裹,参考下面的例子:

fn main() {  let number = 6;  if number < 5 {    println!("condition was true");  } else {    println!("condition was false");  }  if number % 4 == 0 {      println!("number is divisible by 4");  } else if number % 3 == 0 {      println!("number is divisible by 3");  } else if number % 2 == 0 {      println!("number is divisible by 2");  } else {      println!("number is not divisible by 4, 3, or 2");  }  if number {    println!("number is not zero");  }}
复制代码

与其它语言不同的是,Rust 对条件表达式的值校验比较严格,必须为布尔值(bool),否则在编译的时候就会报错,而其它语言会有些默认的规则,譬如,将非 0 的数转换为 true。因此,上面的例子中的 if number 在编译时会报错。

    另外,在 else if 条件多于 1 个的时候,从可读性和代码结构上考虑,Rust 官方建议考虑使用 match (后面会有章节详细介绍)对代码进行重构。

在 let 语句中使用 if

由于 if 是个表达式,因此可以用在 let 语句里进行赋值,这个类似于 Java 里的三元表达式,参考下面的例子:

fn main() {    let condition = true;    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);}
复制代码

循环

Rust 支持三种循环关键字,即 loop、while 和 for ,下面进行分别介绍。

loop

loop 语句里的代码会不断重复执行,直到显示的终止循环(break 关键字),参考下面的例子:

fn main(){    let mut count = 1;    loop {      println!("the count is {}",count);      if count == 3 {        break;      }      count += 1; }
复制代码

和其它语言不同,Rust 的 loop 循环可以通过 break 关键字直接返回值,譬如,用来检查线程是否完成了某项操作,在操作完成后返回结果值。参考下面的例子:


fn main() { let mut counter = 1; let result = loop { if counter == 5 { break counter; } counter += 1; }; println!("The result is {}", result);}
复制代码
while

while 循环是指在满足某项条件时不停的循环执行代码,在不满时终止。其实也可以通过 loop、 if、 else 和 break 实现同样效果,但是由于这种场景比较常见,使用 while 来实现可读性更好,更自然简洁。参考下面的例子:


fn main() { let mut count = 1; while count != 5 { println!("{}!", count); count += 1; } println!("count {} ", count);}
复制代码
for

与其它语言不同,Rust 的 for 循环主要用于遍历集合中的数据,当然用 loop 或 while 也都可以实现,同样的原因,使用 for  可读性更好,更自然简洁。参考下面的例子:

fn main() {    let a = [10, 20, 30, 40, 50];    for element in a.iter() {        println!("the value is: {}", element);    }        for i in 1..5      {           println!("count {}", i);      }}
复制代码

使用 for 循环遍历集合还有 1 个好处,就是集合大小如果发生了变化,在遍历时可以不用关心循环的次数,但是如果使用 while 循环可能会发生运行时越界错误或者未完全遍历整个集合。另外,还有 1 个需要注意的是,对表达式 1..5 的遍历是不含最大值 5 的。


发布于: 2021 年 03 月 31 日阅读数: 10
用户头像

关注

还未添加个人签名 2021.03.23 加入

还未添加个人简介

评论

发布
暂无评论
Rust从0到1-基础概念-控制流