# 基础函数

> 

函数使用 `func` 定义：

```dj
func add(x: int, y: int) -> int {
    x + y
}
```

## 规则

- 返回类型必须显式写出
- 顶层函数是当前主要的用户自定义函数形式
- 函数体最后一个不带分号的表达式可以作为返回值
- 也可以显式使用 `return`

## 位置参数函数

```dj
func greet(name: string) -> string {
    `hello ${name}`
}

greet("world")
```

规则：

- 参数按顺序传递
- 尾部 `opt<T>` 参数或带默认值参数可省略

## 具名参数函数

```dj
func create_user({ name: string, age: int }) -> string {
    `${name}:${age}`
}

create_user(name: "Alice", age: 30)
create_user(age: 30, name: "Alice")
```

规则：

- 定义时使用 `{ ... }`
- 调用时直接写 `name: value`
- 顺序无关

## 返回

显式返回：

```dj
func add(x: int, y: int) -> int {
    return x + y;
}
```

尾表达式返回：

```dj
func add(x: int, y: int) -> int {
    x + y
}
```

`unit` 函数可以自然结束，也可以写 `return;`。
