142 lines
2.3 KiB
Markdown
142 lines
2.3 KiB
Markdown
# Vety语言函数和模块
|
|
|
|
## 1. 函数定义
|
|
|
|
### 1.1 基本函数定义
|
|
|
|
使用`func`关键字定义函数:
|
|
|
|
```vety
|
|
func add(a: i32, b: i32): i32 {
|
|
return a + b
|
|
}
|
|
|
|
// 无返回值的函数
|
|
func print_message(msg: string): void {
|
|
print(msg)
|
|
}
|
|
```
|
|
|
|
### 1.2 函数参数
|
|
|
|
函数参数必须指定类型:
|
|
|
|
```vety
|
|
func greet(name: string, age: i32): string {
|
|
return "Hello, " + name + "! You are " + age + " years old."
|
|
}
|
|
```
|
|
|
|
### 1.3 返回值
|
|
|
|
- 函数必须指定返回值类型
|
|
- 使用`return`语句返回值
|
|
- 如果函数不需要返回值,使用`void`类型
|
|
|
|
```vety
|
|
func calculate_area(width: f64, height: f64): f64 {
|
|
return width * height
|
|
}
|
|
```
|
|
|
|
## 2. 原生函数
|
|
|
|
使用`native`关键字声明原生函数,这些函数由底层实现:
|
|
|
|
```vety
|
|
native func print(message: string): void
|
|
native func read_line(): string
|
|
```
|
|
|
|
## 3. 模块系统
|
|
|
|
### 3.1 导入模块
|
|
|
|
使用`import`关键字导入其他模块:
|
|
|
|
```vety
|
|
import io // 导入标准库的io模块
|
|
import math // 导入数学模块
|
|
```
|
|
|
|
### 3.2 模块别名
|
|
|
|
可以使用`as`关键字为导入的模块指定别名:
|
|
|
|
```vety
|
|
import module_name as alias_name
|
|
```
|
|
|
|
## 4. 函数调用
|
|
|
|
### 4.1 基本调用
|
|
|
|
```vety
|
|
let result = add(5, 3)
|
|
print("Hello, World!")
|
|
```
|
|
|
|
### 4.2 模块函数调用
|
|
|
|
```vety
|
|
let current_time = time.now() // 调用模块中的函数
|
|
let random_number = math.random(1, 100)
|
|
```
|
|
|
|
## 5. 注解
|
|
|
|
使用`@`符号添加函数注解:
|
|
|
|
```vety
|
|
@deprecated
|
|
func old_function(): void {
|
|
// 已废弃的函数
|
|
}
|
|
|
|
@test
|
|
func test_feature(): void {
|
|
// 测试函数
|
|
}
|
|
```
|
|
|
|
## 6. 错误处理
|
|
|
|
函数可以抛出错误,调用者需要处理这些错误:
|
|
|
|
```vety
|
|
func divide(a: f64, b: f64): f64 {
|
|
if (b == 0) {
|
|
throw "Division by zero"
|
|
}
|
|
return a / b
|
|
}
|
|
|
|
try {
|
|
let result = divide(10.0, 0.0)
|
|
} catch(e) {
|
|
print("除法运算失败")
|
|
}
|
|
```
|
|
|
|
## 7. 最佳实践
|
|
|
|
- 函数名使用小写字母和下划线
|
|
- 函数应该只做一件事情
|
|
- 参数数量不宜过多
|
|
- 适当添加注释说明函数功能
|
|
- 处理所有可能的错误情况
|
|
|
|
```vety
|
|
// 好的函数示例
|
|
func calculate_average(numbers: array<): f64 {
|
|
if (numbers.length == 0) {
|
|
throw "Empty array"
|
|
}
|
|
|
|
let sum: f64 = 0.0
|
|
for num in numbers {
|
|
sum = sum + num
|
|
}
|
|
return sum / numbers.length
|
|
}
|
|
``` |