附录 B - 操作符与符号
本附录包含 X 语言语法中使用的所有操作符和符号的目录。
本附录基于 X 语言的宪法性文件(DESIGN_GOALS.md 和 README.md)。
操作符
表 B-1 包含按优先级从高到低排序的操作符。
表 B-1: 操作符
| 操作符 | 示例 | 名称 | 说明 | 优先级 |
|---|---|---|---|---|
:: | Module::name | 路径分隔符 | 命名空间或模块路径 | 1 |
. | value.method() | 方法调用 | 方法调用或字段访问 | 1 |
. | value.field | 字段访问 | 记录或结构体字段访问 | 1 |
() | func(args) | 函数调用 | 函数或方法调用 | 1 |
[] | list[index] | 索引 | 列表或数组索引 | 1 |
? | value? | 错误传播 | 传播 Result 或 Option 错误 | 2 |
- | -value | 一元负号 | 数字取反 | 3 |
not | not value | 逻辑非 | 布尔值取反 | 3 |
~ | ~value | 按位非 | 按位取反 | 3 |
* | value * value | 乘法 | 整数或浮点数乘法 | 4 |
/ | value / value | 除法 | 整数或浮点数除法 | 4 |
% | value % value | 取模 | 整数取模 | 4 |
+ | value + value | 加法 | 整数或浮点数加法 | 5 |
+ | string + string | 字符串连接 | 连接两个字符串 | 5 |
- | value - value | 减法 | 整数或浮点数减法 | 5 |
< | value < value | 小于 | 小于比较 | 6 |
> | value > value | 大于 | 大于比较 | 6 |
<= | value <= value | 小于等于 | 小于等于比较 | 6 |
>= | value >= value | 大于等于 | 大于等于比较 | 6 |
== | value == value | 等于 | 相等比较 | 7 |
!= | value != value | 不等于 | 不相等比较 | 7 |
and | value and value | 逻辑与 | 布尔逻辑与 | 8 |
or | value or value | 逻辑或 | 布尔逻辑或 | 9 |
= | name = value | 赋值 | 将值赋给变量 | 10 |
+= | name += value | 加法赋值 | 加法后赋值 | 10 |
-= | name -= value | 减法赋值 | 减法后赋值 | 10 |
*= | name *= value | 乘法赋值 | 乘法后赋值 | 10 |
/= | name /= value | 除法赋值 | 除法后赋值 | 10 |
%= | name %= value | 取模赋值 | 取模后赋值 | 10 |
^= | name ^= value | 按位异或赋值 | 按位异或后赋值 | 10 |
-> | -> Type | 返回类型箭头 | 函数返回类型 | 11 |
=> | pattern => expr | 胖箭头 | 模式匹配分支或闭包 | 11 |
| ` | >` | `value | > func` | 管道 |
.. | start..end | 范围 | 左闭右开范围 | 13 |
..= | start..=end | 包含范围 | 包含两端的范围 | 13 |
非操作符符号
表 B-2 包含不作为操作符出现但具有各种功能的所有符号。
表 B-2: 符号
| 符号 | 示例 | 名称 | 说明 |
|---|---|---|---|
// | // 注释 | 单行注释 | 注释掉直到行尾 |
/// | /// 文档注释 | 文档注释 | Markdown 文档注释 |
_ | _ | 通配符模式 | 忽略值或占位符 |
_ | let _ = x | 通配符绑定 | 显式忽略值 |
' | 'a' | 字符字面量 | 单个 Unicode 字符 |
" | "string" | 字符串字面量 | 字符串 |
` | `identifier` | 原始标识符 | 转义关键字 |
{} | { ... } | 块表达式 | 表达式块 |
{} | { x: 5 } | 记录字面量 | 记录或结构体实例化 |
() | () | Unit 字面量 | Unit 类型的唯一值 |
() | (expr) | 括号表达式 | 明确优先级 |
() | (Type, Type) | 元组类型 | 元组类型声明 |
() | (value, value) | 元组字面量 | 元组实例化 |
[] | [Type] | 列表类型简写 | List<Type> 的简写 |
[] | [value, value] | 列表字面量 | 列表实例化 |
: | name: Type | 类型注解 | 变量或参数的类型 |
: | key: value | 字段初始化 | 记录或结构体字段 |
, | a, b | 逗号 | 分隔项 |
; | expr; | 分号 | 语句终止符(可选) |
| ` | ` | `Variant1 | Variant2` |
| ` | ` | ` | param |
& | &Type | 引用/按位与 | 引用类型或按位与 |
@ | name @ pattern | 模式绑定 | 绑定到完整值的名称 |
# | #attribute | 属性 | 编译器属性或注解 |
符号和类型设计原则
X 语言的符号和类型设计遵循以下原则(来自 DESIGN_GOALS.md 和 x-keywords.md / x-types.md):
- 键盘上能直接打出来:不使用需要特殊输入法或 Unicode 查表才能输入的符号
- 看到就知道什么意思:每个符号的含义对大多数程序员来说应该是显而易见的
- 宁可用关键字也不用符号:当符号的含义不够清晰时,用英文单词代替
- 使用
not/and/or代替!/&&/|| - 使用完整单词
function代替缩写
- 使用
- 基础类型小写,引用类型大写:
- 值类型(小写):
integer、float、boolean、string、character - 引用类型(大写):
Integer、Float、Boolean、String、Character
- 值类型(小写):
- 固定大小整数类型使用完整短语:如
signed 8bit integer、unsigned 32bit integer,不使用i8/u32等缩写 - main 函数可选:可以像 Swift 一样直接在文件顶层编写代码,不需要
main函数 - 常量使用连字符(kebab-case):如
MAX-RETRY-COUNT,不使用下划线
设计准则:符号应该是“看一眼就懂“的。如果需要解释,就用英文单词代替。键盘上的每个符号都很宝贵——只用最常见、最直观的那些。
符号组合
一些符号组合在一起形成特殊语法:
| 符号组合 | 示例 | 名称 | 说明 |
|---|---|---|---|
when/is | when expr is { ... } | 模式匹配 | 完整的模式匹配表达式 |
function | function name() { ... } | 函数定义 | 函数声明语法 |
type | type Name = ... | 类型定义 | 类型声明语法 |
let | let name = value | 变量声明 | 变量绑定语法 |
let mutable | let mutable name = value | 可变变量 | 可变变量绑定语法 |
if/else | if cond { ... } else { ... } | 条件表达式 | 完整的 if-else 表达式 |
| ` | >` | `value | > func |