对于逻辑判断,所有语言都差不多,if, if-else, if-else if-else, while, for... 能满足需求。
if 类fn main() {
let number = 6;
if number % 4 == 0 {
println!("number is divisible by 4");
} else if number % 3 == 0 {
println!("number is divisible by 3");
} else if number % 2 == 0 {
println!("number is divisible by 2");
} else {
println!("number is not divisible by 4, 3, or 2");
}
}
但是Rust的条件语句除了能控制代码流程外,它还是一个表达式,而表达式可以有返回值的。这一点也是显著区别于其它语言的地方。
let number = if condition { 5 } else { 6 };
粗略地说,表达式可以产生值,语句不产生值。这就是为什么函数最后一行如果是返回值的话,不能加分号,因为加了分号就是一个语句,不加分号是一个表达式。由于表达式可以产生值,因此可以用在任何需要值的地方。
fn give_you_nothing() {
5;
}
再深究就要说到Rust的模式匹配了。
循环类loop是死循环,等同while true。
fn main() {
loop {
println!("again!");
}
}
while是家常用法
fn main() {
let mut number = 3;
while number != 0 {
println!("{}!", number);
number -= 1;
}
println!("LIFTOFF!!!");
}
for遍历,只接受迭代器,与Python相似。只接受迭代器的好处就在不会索引越界(从而产生Panic)。
fn main() {
for number in (1..4).rev() {
println!("{}!", number);
}
println!("LIFTOFF!!!");
}
Rust的Panic也就是Rust程序的异常退出机制,类似C程序的段错误。C程序的段错误是因为程序访问了不该访问的资源,被操作系统直接*死的后果(连喊一嗓子的机会都没有),而Panic是Rust程序在检测到异常后主动退出的机制,它可以回溯堆栈,和Python类似,并可根据环境变量控制是否输出更详细的信息。