流程控制
通过条件来执行或重复执行某些代码是编程语言的基础组成部分。在 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 重复执行代码:
利用条件退出循环:
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
复制代码
评论