前言#
上篇文章我们学习了rust的函数,也知道了rust中函数的一些特性
今天我们继续往下学,本来下一章节是注释comment,但是和其他语言一样,不同点在后面的章节,所以这里就先跳过了。
控制流(control flow)#
这块不用多说,也是非常重要的基础。
环境#
还是上次那个
if表达式#
直接来看下例子
fn main() {
let number = 3;
if number < 5 {
println!("condition was true");
} else {
println!("condition was false");
}
} rust中条件不需要括号包裹, 当然你写了也没啥问题,会给你的警告让你移除。
看起来和别的语言也没啥不同,但是rust的特点就是特安全,所以你这里的条件如果不是一个布尔值是会直接报错的,比如

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

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

其它也没啥不同了。
循环#
之前我们写的猜数游戏里就已经用到过循环loop了。不过循环不只有loop一种方式。
**loop**loop就不多说了,我们需要注意的是loop默认是死循环,只有遇到break语句时才会停止,当然,你自己ctrl + c终止程序也是可以的。
另外lopp也是表达式哦,也有{}哦~嘿嘿,那肯定要试下能不能返回值。
当然是可以的[4]

将需要返回的值放到break语句中,其实js也能做到,只不过很少用。
另外需要注意的一个点就是多层循环,break默认是跳出最里层的循环,也就是说如果你有两个loop嵌套的话,那一个break只会停下第二层,第一层还是死循环中。
那么要怎么才能让他们停止呢?官方提供了一种方式,通过命名来解决,也就是如果break;或者continue指向最外层的loop的名字就可以跳出。

是的,你没看错,命名方式是'name,单引号不闭合。。。
while
loop我们不常用,还是while和for更常用一些,和其他语言用法也是一样的
fn main() {
let mut number = 3;
while number != 0 {
println!("{number}!");
number -= 1;
}
println!("LIFTOFF!!!");
}不过需要注意的一点是while没有返回值或者说不需要返回值,因为是通过条件判断的,条件一到自动结束循环。
**for**
while挺方便的,但是有些地方就显得有些繁琐了,比如遍历一个数组,还得先获取数组长度,声明一个index变量,或者用数组长度自减的方式,长度为0的时候跳出循环。很繁琐另外如果条件写错了就可能数组越界了,这会导致程序崩溃,就挺危险。
而用for来循环就会很舒服,来看下rust中for是怎么用的
fn main() {
let array = [0, 1, 2, 3, 4];
for element in array {
if element == 3 {
println!("i found it, {element}");
break;
}
println!("not it, {element}");
};
} 
当然,也并不是所有时候你都有数组可以遍历,这个时候如果你还想用for的话,可以使用rust中标准库里的Range。来看下例子
fn main() {
for number in 1..=4 {
println!("{number}");
}
} 1..=4是不是很眼熟?我们之前在实现一个随机数时就有用到。
总结#
今天我们学了if条件判断以及loop、while、for三种循环。
这一基础大章也学完了。。。怎么说呢,只能是说安全吧。。。
学rust只记得三件事:安全、安全、还特么是安全!
参考#
- ^rust-control-flow https://doc.rust-lang.org/book/ch03-05-control-flow.html#control-flow
- ^rust-if-expressions https://doc.rust-lang.org/book/ch03-05-control-flow.html#if-expressions
- ^rust-if-expressos-block https://doc.rust-lang.org/book/ch03-05-control-flow.html#using-if-in-a-let-statement
- ^rust-loop-returns-value https://doc.rust-lang.org/book/ch03-05-control-flow.html#returning-values-from-loops
- ^rust-while https://doc.rust-lang.org/book/ch03-05-control-flow.html#conditional-loops-with-while
- ^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 属地广东
