第 4 章:变量赋值
4.0 先讲个生活场景:奶茶店小黑板
想象一下你开了家奶茶店,店里有一块小黑板,上面写着菜单:
- 「珍珠奶茶 ¥15」—— 写上去之后基本不改,这就是常量(const)
- 「今日特价」—— 你每天都要擦掉重写,这就是变量(var)
Zig 里 代码登录后可见 和 代码登录后可见 就是这两个东西:
代码登录后可见
口诀:「const 是刻在石板上的字,var 是便利贴」。
4.1 基本语法
代码登录后可见
- 代码登录后可见 = constant(常量),就是那个「刻在石板上的字」
- 代码登录后可见 = variable(变量),就是「便利贴」
- 代码登录后可见 = 类型标注(type annotation),相当于便利贴上写「这个格子是放金额的」、「这个格子是放菜名的」
来个完整例子:
代码登录后可见
- 代码登录后可见:i = integer(整数),32 = 32 位,有符号(可以负,比如冬天 -5 度)
- 代码登录后可见:u = unsigned(无符号),32 位,只能非负(人不能 -5 岁)
4.2 const vs var:什么时候用谁?
核心原则:能用 const 就用 const——就像店里能印在菜单上的东西就别用便利贴。
为什么?三个理由:
- 编译器开心:知道这玩意不会变,能优化得更好(就像老板知道菜单上的价格不变,就不用每天检查一遍)。
- 代码安全:不会被自己(或同事)不小心改掉——menu 改成 5 块的时候不会把 milk_tea_price 误改。
- 阅读友好:看代码的人不用提心吊胆"这玩意儿到底会不会变"。
什么时候必须用 代码登录后可见?两种情况:
反面教材:
代码登录后可见
Zig 的设计哲学:默认不可变,除非明确说"我要改"。这跟现实世界也一样——合同一旦签了(const),就不能随便改;草稿纸(var)可以擦了重写。
4.3 undefined:还没想好写啥
有时候你先要在小黑板上占个位置,但还没想好写啥——这时候用 代码登录后可见:
代码登录后可见
⚠️ 重要警告 ⚠️:Zig 的 代码登录后可见 跟 JavaScript 的 代码登录后可见 不是一回事!
想象一下:
- JS 的 代码登录后可见 = 「这个格子里没东西」(你可以检查 代码登录后可见 来确认)
- Zig 的 代码登录后可见 = 「这个格子里有一坨乱七八糟的旧墨水」(可能是 0,可能是 1234567,可能是你昨晚画的涂鸦)
代码登录后可见
类比:const 的 undefined 像「盖了个章但没填内容」——你没法验证它是不是空的(墨水早就渗进去了),只能保证「填之前别看」。
JavaScript 用户特别注意:JS 里你可以 代码登录后可见 检查是否赋值,但 Zig 里根本没法检测 undefined 值。直接读是未定义行为(undefined behaviour)。
如果你想表达「这个值可能不存在」,请用 可选类型 代码登录后可见(第 26 章专门讲)。
4.4 命名约定(Zig 的"店招规则")
Zig 对名字有一套约定俗成的「店招风格」,跟现实里招牌一样——
| 是什么 | 风格 | 例子 | 现实类比 |
|---|---|---|---|
| 变量、参数、常量 | snake_case | 代码登录后可见, 代码登录后可见 | 店里的价目标签 |
| 函数 | camelCase | 代码登录后可见, 代码登录后可见 | 店员喊的"点单语" |
| 类型、枚举、结构体 | PascalCase | 代码登录后可见, 代码登录后可见 | 店招牌 |
| 模块级常量 | 全大写 | 代码登录后可见, 代码登录后可见 | 国家法定价格 |
具体规则:
代码登录后可见
4.5 字符串:其实就是一串字符
Zig 没有专门的「字符串类型」。字符串在底层就是:
- 代码登录后可见 = 一串 u8(字节),只读(像是玻璃框里的展示品,看得见摸不着)
- 代码登录后可见 = 一串 u8,可改(像黑板上的字,可以擦)
代码登录后可见
为什么没有 代码登录后可见 这种类型?因为 Zig 的设计哲学是「一切皆底层」——字符串就是字节数组,没那么多花里胡哨的封装。
字面量 代码登录后可见 实际类型是 代码登录后可见(带哨兵的指针,第 32 章讲),可以自动转成 代码登录后可见。
4.6 跟其他语言对比
| 概念 | Zig | C | JavaScript | Python |
|---|---|---|---|---|
| 不可变量 | 代码登录后可见 | 代码登录后可见 | 代码登录后可见 | 代码登录后可见(约定) |
| 可变量 | 代码登录后可见 | 代码登录后可见 | 代码登录后可见 | 代码登录后可见 |
| 未初始化 | 代码登录后可见 | 代码登录后可见(脏数据) | 代码登录后可见(undefined) | 没这概念 |
| 强类型推断 | 有 | 无 | 有 | 有 |
跟现实世界再类比一遍:
- Zig 像严谨的银行合同,每笔钱进出都有记录
- C 像现金交易,灵活但容易出错
- JavaScript 像开放式钱包,let/const 区分但容易混乱
- Python 像记账本,完全靠自觉(代码登录后可见 那个大写只是"建议",并不是真不能改)