写点什么

5 分钟速读之 Rust 权威指南(四)

用户头像
码生笔谈
关注
发布于: 2021 年 05 月 18 日
5分钟速读之Rust权威指南(四)

流程控制

通过条件来执行或重复执行某些代码是编程语言的基础组成部分。在 Rust 中用来控制程序执行流的结构主要就是 if 表达式与循环表达式。

if 表达式

JS 中的 if 后边需要加括号,而 Rust 非常精简:


let num = 5;// 条件无需带括号if num < 10 {  println!("小于10");}
复制代码


判断条件只能是布尔值:


if num { // 报错,条件需要是布尔值  println!("true");}
复制代码


rust 中判断两值是相等或不等使用==和≠,而 JS 中使用===和≠=:


// 判断等于0if num == 0 {  println!("0");}
// 判断不等于0时if num != 0 { println!("not 0");}
复制代码


配合 else if 和 else 处理流程分支:


if num < 10 {    println!("小于10")} else if num < 20 {    println!("小于20")} else if num < 30 {    println!("小于30")} else {    println!("大于30")}
复制代码

使用 if 表达式对变量赋值

因为 if 属于表达式,所以具有返回值:


let condition = 1;let foo = if condition >= 1 {  5} else {  6};foo // 5
复制代码


分支中的表达式返回值需要是相同的类型,否则会报错:


let foo = if condition >= 1 {  5} else {  '6' // 报错:预期一个整数,却得到了字符char};
复制代码


与函数的返回值规则一样,表达式的最后一句也不能跟分号,加分号会认为返回空元组:


let foo = if condition >= 1 {  5} else {  6; // 报错:预期一个整数,却得到了空元组:()};
复制代码

循环

loop

使用 loop 重复执行代码:


loop {  println!("无限循环")}
复制代码


利用条件退出循环:


let mut count = 0;loop {  println!("{}", count);  if count >= 3 {    break;  }  count += 1;}// 1// 2// 3
复制代码


loop 循环是具有返回值的:


let mut count = 0;let result = loop {  if count >= 3 {    break count; // 使用break返回值  }  count += 1;};println!("{}", result);// 3
复制代码

while

使用 while 进行有条件地循环:


let mut count = 0;while count <= 3 {  count += 1;  println!("{}", count);}// 1// 2// 3// 4
复制代码


用 loop 实现 while:


let mut count = 0;loop {  if count <= 3 {    count += 1;    println!("{}", count);  } else {    break;  }}// 1// 2// 3// 4
复制代码

for

一般使用 for 循环来遍历各种集合:


let arr = [1, 2, 3];// arr.iter()会返回一个迭代器,相当于JS中的:arr[Symbol.iterator]()// 所以for循环只能遍历拥有迭代器的集合for item in arr.iter() {  println!("{}", item)}// 1// 2// 3
复制代码


用 while 实现 for 循环:


let arr = [1,2,3];let mut index = 0;while index < arr.len() {  println!("{}", arr[index]);  index += 1;}
复制代码


for 循环还支持遍历区间,包前不包后:


for num in 1..3 {  println!("{}", num);}// 1// 2
复制代码


事实上区间是 rust 中的一个类型,可以反转:


// 使用rev()函数将1, 2, 3反转为3, 2, 1for num in (1..3).rev() {  println!("{}", num);}// 3// 2
复制代码


我们发现 rust 中是不支持像 JS 中的那种能够对指针进行控制的循环的:


for (let i = 0; i <= 6; i++) {  console.log(i)  if (i <= 3) {    i++  }}// 0// 2// 4// 5// 6
复制代码


在 rust 中需要用 while 循环来实现:


let mut i = 0; // 初始值while i <= 6 { // 判断条件  println!("{}", i);  if i <= 3 {    i += 1  }  i += 1; // 累加值}// 0// 2// 4// 5// 6
复制代码


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

码生笔谈

关注

欢迎关注「码生笔谈」公众号 2018.09.09 加入

前端、Rust干货分享,一起成为更好的Javascripter & Rustacean

评论

发布
暂无评论
5分钟速读之Rust权威指南(四)