流程控制
Rust 的流程控制分为两类:
- 条件判断(if)
- 循环(for、loop、while)
主要涉及到四个语法:if
、for
、loop
和 while
。
if 条件判断
和大多数语言不同的是,Rust 的条件判断并不需要加上小括号 ()
,是可以省略的。
fn main() {
let num = 10;
if num > 8 {
println!("num 大于 8");
} else {
println!("num 小于 8");
}
}
如果写上括号,编译器会提示“warning: unnecessary parentheses around if
condition”,也就是不必要的插入语。
同时,Rust 中也不存在强制类型转换,在写判断条件时,必须是准确的 true 或者 false:
let num = 10
if num > 10 {} // √
if num {} // 在 JS 中 10 会类型转换为 true
for 循环
for 循环是最常用的循环结构,常用来遍历一个线性数据据结构(比如数组)。
for 循环遍历数组:
fn main() {
let a = [1, 2, 3, 4, 5];
// a.iter() 代表 a 的迭代器(iterator)
for i in a.iter() {
println!("{}", i); // 1,2,3,4,5
}
}
loop 循环
loop
用于创建无限循环,使用 break 关键字来跳出循环。
// 无限循环下去
loop {
println!("旋转,跳跃,我不停歇!");
}
// 无限循环下去
loop {
println!("旋转,跳跃,我不停歇!");
// 跳累了,要歇会
break;
}
break 关键字在结束循环时还可以返回一个值:
let mut count = 1;
let loop_count = loop {
count += 1;
if count > 100 {
// 循环了 101 次,跳出循环,并返回一个结果
break count;
}
};
println!("一共循环了:{} 次", loop_count);
// 一共循环了:101 次
while 循环
while 循环是最典型的条件语句循环。 只要条件表达式保持为 true,就会一直循环下去。
结束循环的调节就是将条件设为 false。
let mut count = 0
while count < 5 {
println!("我们跳啊跳,跳啊条...");
count += 1;
}
println!("结束循环");
函数
正如 Hello World 示例中的那样:
fn main() {
println!("Hello, world!");
}
Rust 中使用关键字 fn
来声明一个函数。一般函数都会有入参和返回值。函数体包含了一系列的语句和表达式。
函数返回值可以使用 return 语句,也可以使用表达式。
函数的名字和变量一样,遵循蛇形命名法(snake case):
fn getPersonList () {} // ×
fn get_person_list () {} // √
函数可以定义在任意位置,好似 JS 中的函数声明提升。
Rust 是强类型语言,声明函数时如果有参数,参数必须指定类型:
fn main() {
add(10, 20); // 30
}
// 两个参数都是 i32 类型的整数
fn add(a: i32, b: i32) {
println!("{}", a + b);
}
函数若有返回值,必须通过 ->
指明返回值的类型:
fn main() {
let res = add(10, 10);
println!("函数 add 执行的结果是: {}", res);
}
// 两个参数都是 i32 类型的整数,返回值也是 i32
fn add(a:i32, b:i32) -> i32 {
return a + b;
}
关于函数的返回值,容易发生混乱:
在 JS 中,使用 return
关键字来结束函数的执行,并将 return
后面的结果作为函数的返回值。
在 Rust 中,基本和 JS 差不多,可以使用 return
来返回函数的执行结果,就像上面那样。也可以使用一个表达式来作为函数的返回内容:
fn main() {
let res = add(10, 10);
println!("函数 add 执行的结果是: {}", res);
}
fn add(a:i32, b:i32) -> i32 {
// `a + b` 是一条表达式,求值后,返回一个值.因为它是函数的最后一行,因此该表达式的值也就是函数的返回值。
a + b
}
如果函数没有返回值,返回值的类型可以不写,也可以写成 -> ()
:
fn main() {
foo(10);
}
fn foo(a:i32) ->() {
println!("{}", a);
}
小结
本文介绍了 Rust 中的流程控制语句,主要包括了:
- if 条件判断
- for 循环
- loop 循环
- while 循环
使用时要注意,if 条件表达式不存在类型转换;在做循环是根据需求选择合适的循环语句。
然后介绍了 Rust 函数的声名方式,主要注意事项是参数和返回值的类型。如果有参数,一定要指定类型;如果有返回值,也要指定返回值的类型。