0°

Rust 的条件语句、表达式与语句和功能函数的返回值

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 。

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!