坏蛋Dan
知乎@坏蛋Dan
发布时间:2024.1.3

前言

上篇文章我们学习了rust的函数,也知道了rust中函数的一些特性

坏蛋Dan:rust基础学习--day6

今天我们继续往下学,本来下一章节是注释comment,但是和其他语言一样,不同点在后面的章节,所以这里就先跳过了。


控制流(control flow)

这块不用多说,也是非常重要的基础。

环境

还是上次那个


if表达式

直接来看下例子

rust中条件不需要括号包裹, 当然你写了也没啥问题,会给你的警告让你移除。

看起来和别的语言也没啥不同,但是rust的特点就是特安全,所以你这里的条件如果不是一个布尔值是会直接报错的,比如

另外,rust还允许赋值,毕竟if表达式中也有{}也就是花括号,允许返回值[3]

当然,按老规矩这里的返回值得是相同的。

其它也没啥不同了。


循环

之前我们写的猜数游戏里就已经用到过循环loop了。不过循环不只有loop一种方式。

loop就不多说了,我们需要注意的是loop默认是死循环,只有遇到break语句时才会停止,当然,你自己ctrl + c终止程序也是可以的。

另外lopp也是表达式哦,也有{}哦~嘿嘿,那肯定要试下能不能返回值。

当然是可以的[4]

将需要返回的值放到break语句中,其实js也能做到,只不过很少用。

另外需要注意的一个点就是多层循环,break默认是跳出最里层的循环,也就是说如果你有两个loop嵌套的话,那一个break只会停下第二层,第一层还是死循环中。

那么要怎么才能让他们停止呢?官方提供了一种方式,通过命名来解决,也就是如果break;或者continue指向最外层的loop的名字就可以跳出。

是的,你没看错,命名方式是'name,单引号不闭合。。。

while

loop我们不常用,还是whilefor更常用一些,和其他语言用法也是一样的

不过需要注意的一点是while没有返回值或者说不需要返回值,因为是通过条件判断的,条件一到自动结束循环。

**for**

while挺方便的,但是有些地方就显得有些繁琐了,比如遍历一个数组,还得先获取数组长度,声明一个index变量,或者用数组长度自减的方式,长度为0的时候跳出循环。很繁琐另外如果条件写错了就可能数组越界了,这会导致程序崩溃,就挺危险。

而用for来循环就会很舒服,来看下rustfor是怎么用的

当然,也并不是所有时候你都有数组可以遍历,这个时候如果你还想用for的话,可以使用rust中标准库里的Range。来看下例子

1..=4是不是很眼熟?我们之前在实现一个随机数时就有用到。


总结

今天我们学了if条件判断以及loop、while、for三种循环。

这一基础大章也学完了。。。怎么说呢,只能是说安全吧。。。

rust只记得三件事:安全、安全、还特么是安全!

参考

  1. ^rust-control-flow https://doc.rust-lang.org/book/ch03-05-control-flow.html#control-flow
  2. ^rust-if-expressions https://doc.rust-lang.org/book/ch03-05-control-flow.html#if-expressions
  3. ^rust-if-expressos-block https://doc.rust-lang.org/book/ch03-05-control-flow.html#using-if-in-a-let-statement
  4. ^rust-loop-returns-value https://doc.rust-lang.org/book/ch03-05-control-flow.html#returning-values-from-loops
  5. ^rust-while https://doc.rust-lang.org/book/ch03-05-control-flow.html#conditional-loops-with-while
  6. ^rust-for https://doc.rust-lang.org/book/ch03-05-control-flow.html#looping-through-a-collection-with-for

发布于 2022-11-30 16:08・IP 属地广东