流程控制
通过条件来执行或重复执行某些代码是编程语言的基础组成部分。在 Rust 中用来控制程序执行流的结构主要就是 if 表达式与循环表达式。
if 表达式
JS 中的 if 后边需要加括号,而 Rust 非常精简:
let num = 5;
// 条件无需带括号
if num < 10 {
println!("小于10");
}
复制代码
判断条件只能是布尔值:
if num { // 报错,条件需要是布尔值
println!("true");
}
复制代码
rust 中判断两值是相等或不等使用==和≠,而 JS 中使用===和≠=:
// 判断等于0
if 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 重复执行代码:
利用条件退出循环:
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, 1
for 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
复制代码
评论