if
语句
每一门编程语言都包含的一个改变控制流程的部分,必然首当其冲的、必不可少的就是if语句了
与一些语言不同的是 Rust 的 if 语句条件必须为 bool 类型,像JavaScript 语言,它会将if后的值隐式转换为 bool 类型
fn main() {
let num: i16 = 1024;
if num < 1024 {
println!("{}小于1024",num);
} else if num > 1024 {
println!("{}大于1024",num);
} else {
println!("{}等于1024",num);
}
}
// 1024等于1024
我们还可以将if语句结果进行一个赋值(因为 if 语句是一个表达式),就像这样:
fn main() {
let num: i16 = 1024;
if num < 1024 {
println!("{}小于1024",num);
} else if num > 1024 {
println!("{}大于1024",num);
} else {
println!("{}等于1024",num);
}
foo(num);
}
// 1024等于1024
fn foo(num: i16) {
let foo_num =
if num < 1024 {
num * 2
} else if num > 1024 {
num / 2
} else {
num + 1
};
println!("{}",foo_num);
}
我们在代码中只写了一个 else if 语句,如果实际情况需要我们使用一个以上的 else if 语句 ,那么我们最好使用 match
来重构代码
还有一个点是我们需要注意的,我们之前说过 if 语句是一个表达式,可以进行赋值给变量,这就出现了一个非常容易出错的点,那就是 Rust 是强类型语言,在编译时必须确定变量的数据类型,如果一个 if 语句的返回值是不同的数据类型,那么 Rust 会报错
// 错误示例
fn test(num: i16) {
let test_var =
if num == 1024 {
num
} else {
'N'
};
// `if` and `else` have incompatible types
}
控制流-循环
Rust 控制流有三种循环,分别是 loop、while、for
loop循环
loop 关键字告诉 Rust 反复执行一块代码,持续到你 break 跳出循环,还可以使用 continue 跳过循环体的剩余部分并开始下一轮循环
fn main() {
let mut num: i16 = 1000;
loop {
if num < 1024 {
num = num + 1;
} else {
println!("{}",num);
break;
}
}
}
// 1024
while 循环
while每次执行循环体之前都要进行一次条件判断
fn main() {
let mut num:i16 = 1024;
while num == 1024 {
println!("{} - 节日快乐",num);
num = num + 1;
}
println!("明天就是{}",num);
}
// 1024 - 节日快乐
// 明天就是1025
for循环迭代器
相对来说的话,使用for … in循环遍历集合更加安全简洁,使用loop以及while当然也可以遍历集合,但是相对来说容错率低、效率相对较差
fn main() {
let arr: [i32;6] = [12,22,32,42,52,62];
for item in arr.iter() {
println!("{}",item);
}
}
// 12
// 22
// 32
// 42
// 52
// 62
这里需要注意的是item是一个引用,而不是一个i32类型的值,相当于一个指针
Range
最后提一嘴这个标准库提供的Range类型,我们可以指定一个开始数字以及一个结束数字,Range即可生成他们之间的数字(不含结束位置)
fn main() {
for item in (1..4).rev() {
// rev():翻转Range
println!("{}",item);
}
}
// 3
// 2
// 1