95 lines
1.8 KiB
Markdown
95 lines
1.8 KiB
Markdown
---
|
|
title: "给 Golang 开发者的 Rust 私房菜 04 函数、表达式和语句"
|
|
categories: [ "Rust" ]
|
|
tags: [ "rust" ]
|
|
draft: false
|
|
slug: "rust-tutorial-04"
|
|
date: "2025-01-05T22:45:00+0800"
|
|
---
|
|
|
|
## Bilibili
|
|
|
|
{{< bilibili BV1TVrTYCESM >}}
|
|
|
|
建议前往 B 站观看哦!
|
|
|
|
---
|
|
|
|
## 函数
|
|
|
|
### 定义与调用
|
|
|
|
- 使用 `fn` 关键字定义函数。
|
|
|
|
- 参数需要显式声明类型。
|
|
|
|
```rust
|
|
fn add(a: i32, b: i32) -> i32 {
|
|
a + b
|
|
}
|
|
|
|
fn main() {
|
|
let result = add(2, 3);
|
|
println!("Result: {}", result);
|
|
}
|
|
```
|
|
|
|
### 返回值
|
|
|
|
函数的返回值是最后一个表达式的值,无需显式 `return`。
|
|
|
|
```rust
|
|
// 使用 return
|
|
fn square(x: i32) -> i32 {
|
|
return x * x;
|
|
}
|
|
|
|
// 无需显式 return
|
|
fn square(x: i32) -> i32 {
|
|
x * x // 结尾没有分号
|
|
}
|
|
```
|
|
|
|
使用空元组 `()` 表示函数无返回值。
|
|
|
|
```rust
|
|
fn greet() {
|
|
println!("Hello, Rust!");
|
|
}
|
|
|
|
fn greet() {
|
|
println!("Hello, Rust!") // 无分号,返回值是 `()`
|
|
}
|
|
```
|
|
|
|
### 表达式和语句
|
|
|
|
- **表达式**会返回一个值,例如 `a + b` 或数字 `42`。
|
|
- **语句**不返回值,例如变量声明 `let x = 5;`。
|
|
- 函数中的最后一行是表达式,因此不需要 `return`。
|
|
|
|
```rust
|
|
fn calculate(x: i32) -> i32 {
|
|
let doubled = x * 2; // 语句,定义变量
|
|
doubled + 1 // 表达式,最终返回值是 (x * 2) + 1
|
|
}
|
|
```
|
|
|
|
- Rust 中的代码块 `{}` 是一个表达式,其返回值为块中最后一个表达式的值。
|
|
|
|
```rust
|
|
fn main() {
|
|
let result = {
|
|
let a = 10;
|
|
let b = 20;
|
|
a + b // 块的返回值
|
|
};
|
|
println!("Result: {}", result); // 输出 30
|
|
}
|
|
```
|
|
|
|
## 实践建议
|
|
|
|
- 尽量利用表达式简化函数逻辑,减少显式 `return`。
|
|
- 使用代码块返回值时,保持代码可读性,避免嵌套过深。
|