上一篇文章中,我们介绍了 Rust 最基础的变量、运算、数据类型、注释等内容。
本文,我们就来进一步讲解函数、条件、循环等基础语法。
2. 函数
2.1 函数定义
此前的文章中我们已经介绍过 Rust 的函数:
代码语言:javascript复制fn <函数名> ( <参数> ) { <函数体> }
Rust 的函数名命名规范是下划线式:
代码语言:javascript复制fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Hello, runoob!");
}
2.2 函数参数
Rust 中定义函数如果需要具备参数必须声明参数名称和类型:
代码语言:javascript复制fn main() {
another_function(5, 6);
}
fn another_function(x: i32, y: i32) {
println!("x 的值为 : {}", x);
println!("y 的值为 : {}", y);
}
函数参数的传入类型与声明类型必须严格匹配。
2.3 函数体
Rust 中可以在一个用 {} 包括的块里编写一个较为复杂的表达式,从而构成一个函数体:
代码语言:javascript复制fn main() {
let x = 5;
let y = {
let x = 3;
x 1
};
println!("x 的值为 : {}", x);
println!("y 的值为 : {}", y);
}
打印出了:
x 的值为 : 5 y 的值为 : 4
- 需要注意的是函数体中的 x 1 末尾是没有分号的,否则它将变成一条语句。
2.4 函数嵌套
在 Rust 中,函数定义可以嵌套:
代码语言:javascript复制fn main() {
fn five() -> i32 {
5
}
println!("five() 的值为: {}", five());
}
2.5 函数返回值
代码语言:javascript复制fn add(a: i32, b: i32) -> i32 {
return a b;
}
3. 条件语句
3.1 条件语句的用法
和许多其他语言类似,Rust 的条件语句并不难理解:
代码语言:javascript复制fn main() {
let a = 12;
let b;
if a > 0 {
b = 1;
}
else if a < 0 {
b = -1;
}
else {
b = 0;
}
println!("b is {}", b);
}
总结起来就是这样:
代码语言:javascript复制if <condition> { block 1 } else { block 2 }
condition 必须是 bool 类型,也可以加括号括起来,但一般来说并不需要。
3.2 条件语句与函数体表达式结合
条件语句的语法中的 { block 1 } 和 { block 2 } 也可以用函数表达式:
代码语言:javascript复制fn main() {
let a = 3;
let number = if a > 0 { 1 } else { -1 };
println!("number 为 {}", number);
}
4. 循环
Rust 语法中的循环有三种:
- while 循环
- for 循环
- loop 循环
4.1 while 循环
代码语言:javascript复制fn main() {
let mut number = 1;
while number != 4 {
println!("{}", number);
number = 1;
}
println!("EXIT");
}
打印出了:
1 2 3 EXIT
4.2 for 循环
rust 没有 C 语言中那种三元操作的 for 循环,rust 的 for 循环用于迭代一个元组或数组,类似于 php 中的 foreach 循环:
代码语言:javascript复制fn main() {
let a = [10, 20, 30, 40, 50];
for i in a.iter() {
println!("值为 : {}", i);
}
}
4.3 loop 循环
loop 循环就是无限循环:
代码语言:javascript复制fn main() {
let s = ['R', 'U', 'N', 'O', 'O', 'B'];
let mut i = 0;
loop {
let ch = s[i];
if ch == 'O' {
break;
}
println!("'{}'", ch);
i = 1;
}
}
4.4 loop 循环与函数体表达式
loop 循环可以通过 break 关键字类似于 return 一样使整个循环退出并给予外部一个返回值。这是一个十分巧妙的设计,因为 loop 这样的循环常被用来当作查找工具使用,如果找到了某个东西当然要将这个结果交出去:
代码语言:javascript复制fn main() {
let s = ['R', 'U', 'N', 'O', 'O', 'B'];
let mut i = 0;
let location = loop {
let ch = s[i];
if ch == 'O' {
break i;
}
i = 1;
};
println!(" 'O' 的索引为 {}", location);
}
打印出了:
'0' 的索引为 3