Rust 的条件语句、表达式与语句和功能函数的返回值
一、标准语句
1、if 基本语句
1
2
3
4
5
6 1let x = 5;
2
3if x == 5 {
4 println!("x is five!");
5}
6
if 后面 x ==5 是一个表达式 expression 。
2、if … else语句
1
2
3
4
5
6
7
8 1let x = 5;
2
3if x == 5 {
4 println!("x is five!");
5} else {
6 println!("x is not five :(");
7}
8
3、if … else if … else
1
2
3
4
5
6
7
8
9
10 1let x = 5;
2
3if x == 5 {
4 println!("x is five!");
5} else if x == 6 {
6 println!("x is six!");
7} else {
8 println!("x is not five or six :(");
9}
10
二、特别语句
1
2
3
4
5
6
7
8 1let x = 5;
2
3let y = if x == 5 {
4 10
5} else {
6 15
7}; // y: i32
8
或者,还可以写成这样
1
2
3
4 1let x = 5;
2
3let y = if x == 5 { 10 } else { 15 }; // y: i32
4
如果 x 等于 5,那么 y = 10 ;否则 y = 15 。
这个特别语句是个非常好的例子,我想了很久,该如何把几个关键的概念串起来,并容易理解。
上面这个语句是一个非常好的切入形式!
这段代码执行后的结果是, y = 10
这里重点提及几个关键的概念:
1、代码块 – block
代码块是用大括号包围起来的代码 { }
2、表达式 – expression
一个表达式是不以分号;结尾的、是有值的一行代码。
block可以有返回值,因此block也是一个表达式。
3、语句 – statement
statement是以分号结尾的一行代码,statement的返回值是空的tuple或者称为Unit type,即(),一对空的括号。
官方将以分号结尾的表达式expression称为 expression statement.
好,用代码解释一下:
1
2
3
4 1fn add_one(x: i32) -> i32 {
2 x + 1
3}
4
x + 1 是一个表达式,没有分号!
一个功能函数中如果没有用 return 明确返回值,功能函数代码块中的最后一个表达式作为返回值。
再比较一下:
1
2
3
4 1fn add_one(x: i32) -> i32 {
2 x + 1;
3}
4
x + 1;
有一个分号,因此这是一个statement。statement返回的是();
而这个功能函数要求返回32位整型数值,所以编译会出错。
改一下
1
2
3
4 1 fn add_one(x: i32) {
2 x + 1;
3}
4
x + 1; 是一个statement,返回空的tuple : ()
功能函数没有要求返回值,所以可以正常执行。
再看一下 if 语句:
1
2
3
4
5
6
7
8 1let x = 5;
2
3let y = if x == 5 {
4 10
5} else {
6 15
7}; // y: i32
8
x == 5 是一个表达式 expression。
10 和 15 都是 expression,因此当条件语句执行后,无论是if 还是else都会返回有效的32位整型值给 y 。