# 变量

## 功能

变量用于给值起名字，便于后续读取、修改和传递。BT 是动态类型语言，变量可以在运行过程中重新赋值为不同类型的值。

## 语法

```bt
name = 'Nina'
age = 26
sex = 'Girl'
```

## 命名规则

| 规则 | 说明 |
| ------ | ------ |
| 首字符 | 可以是小写英文字母、`_` 或 `$`，不能是数字，也不能是大写字母。 |
| 后续字符 | 可以是英文字母、数字、`_` 或 `$`。 |
| 大小写 | 区分大小写，`name` 和 `Name` 含义不同。 |

匹配 `[A-Z][A-Za-z0-9_]*` 的名称会被识别为常量，例如 `Name`、`Config`、`NAME`、`Name_1`。如果首字母大写但包含 `$`，例如 `User$`，会直接报错。

## let 局部声明

`let` 用于声明当前函数内的局部变量。未初始化的变量值为 `empty`。`let` 只属于变量，不能用于声明常量。

```bt
fn demo() {
    let count = 1
    count = count + 1
    count
}
```

## 返回值

| 类型 | 说明 |
| ------ | ------ |
| Any | 赋值表达式返回右侧表达式的值。 |

## 代码示例

```bt
data = 'Nina'
data = 26
data = true

first second third

println data
println is_empty(first)
```

## 注意事项

- 多条语句可以换行书写，也可以用逗号分隔。
- `first second third` 这种空值声明会把变量初始化为 `empty`。
- 变量名不能以大写字母开头；需要不可重复写入的绑定时使用常量命名规则，并直接用赋值语法定义。
