vety-language/doc/03_functions_and_modules.md

2.3 KiB

Vety语言函数和模块

1. 函数定义

1.1 基本函数定义

使用func关键字定义函数:

func add(a: i32, b: i32): i32 {
    return a + b
}

// 无返回值的函数
func print_message(msg: string): void {
    print(msg)
}

1.2 函数参数

函数参数必须指定类型:

func greet(name: string, age: i32): string {
    return "Hello, " + name + "! You are " + age + " years old."
}

1.3 返回值

  • 函数必须指定返回值类型
  • 使用return语句返回值
  • 如果函数不需要返回值,使用void类型
func calculate_area(width: f64, height: f64): f64 {
    return width * height
}

2. 原生函数

使用native关键字声明原生函数,这些函数由底层实现:

native func print(message: string): void
native func read_line(): string

3. 模块系统

3.1 导入模块

使用import关键字导入其他模块:

import io  // 导入标准库的io模块
import math // 导入数学模块

3.2 模块别名

可以使用as关键字为导入的模块指定别名:

import module_name as alias_name

4. 函数调用

4.1 基本调用

let result = add(5, 3)        
print("Hello, World!")       

4.2 模块函数调用

let current_time = time.now() // 调用模块中的函数
let random_number = math.random(1, 100)

5. 注解

使用@符号添加函数注解:

@deprecated
func old_function(): void {
    // 已废弃的函数
}

@test
func test_feature(): void {
    // 测试函数
}

6. 错误处理

函数可以抛出错误,调用者需要处理这些错误:

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. 最佳实践

  • 函数名使用小写字母和下划线
  • 函数应该只做一件事情
  • 参数数量不宜过多
  • 适当添加注释说明函数功能
  • 处理所有可能的错误情况
// 好的函数示例
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
}