函数
- 声明函数使用fn关键字
- 按照惯例,针对函数和变量名,Rust使用snack case命名规范: 字母小写,下划线分开
参数
- parameter 形参 arguments 实参 和js一样
语句与表达式
(这个概念还是有点重要的,和原本js思路不一样)
- Rust是一个基于表达式的语言
- 语句是执行一些动作的指令
- 表达式会计算产生一个值
- 语句不返回值
fn main() {
// let y = {
// let x = 1;
// x + 3; // 这就是一个语句,这时候y是一个空的Tuple
// }
let y = {
let x = 1;
x + 3 // 不带分号,这就是一个表达式,y会是这段代码中最后一个表达式的值
}
println!("y is {}",y)
}
返回值
- 定义函数时,在 -> 符号后面声明函数的返回值类型
- 在Rust里面,返回值就是函数体里面的最后一个表达式的值
- 若想提前返回,可以使用return关键字制定一个值 (在Rust中大多数函数都是默认使用最后一个表达式作为返回值的)
fn plus_five(x:i32) -> i32{
x + 5 // 这里一定不能加分号,加分号就是一个语句了,现在是一个表达式
}
fn main() {
let y = plus_five(6);
println!("y is {:#?}",y)
}
控制流:if else
- if 是一个表达式,后面跟的条件必须是一个bool类型(和js不一样,不会隐式类型转换)
示例:
let number = 5;
if number < 6{
println!("true")
} else {
println!("false")
}
- 可以用 else if 处理多重条件
- 但如果用了多余一条else if 建议使用 match 重构
- 因为 if 是一个表达式,所以if表达式可以放在let语句中等号右边,示例:
fn main() {
let condition = true;
let number = if condition { 5 } else { 6 };
println!("The value of number is {}",number);
}
控制流: 循环
- loop循环: 反复执行一段代码,直到你喊停,loop也是一个表达式,示例
fn main() {
let mut counter = 0;
let result = loop {
counter+=1;
if counter == 10 {
break counter * 2
};
};
println!("The result is {}",result);
}
- while循环,每次执行循环体事前都判断一次条件,示例:
fn main() {
let mut counter = 3;
while counter != 0 {
println!("{}!",counter);
counter-=1;
};
}
for 循环
遍历集合,while或loop也可以遍历集合,但易错且低效
fn main() {
// 类似js中的 for in
let a = [1,2,3,4,5];
for elem in a.iter() {
println!("element is {}",elem);
}
}
Range,标注库提供Range,可以指定一个开始数字和一个结束数字,Range可以生成他们之间的数字(不包含结束),且有rev方法可以反转Range
fn main() {
// 表现和刚刚的while循环完全一致
for number in (1..4).rev(){
println!("{}!",number);
}
}