Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

附录 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?错误传播传播 ResultOption 错误2
--value一元负号数字取反3
notnot 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
andvalue and value逻辑与布尔逻辑与8
orvalue 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;分号语句终止符(可选)
```Variant1Variant2`
```param
&&Type引用/按位与引用类型或按位与
@name @ pattern模式绑定绑定到完整值的名称
##attribute属性编译器属性或注解

符号和类型设计原则

X 语言的符号和类型设计遵循以下原则(来自 DESIGN_GOALS.md 和 x-keywords.md / x-types.md):

  1. 键盘上能直接打出来:不使用需要特殊输入法或 Unicode 查表才能输入的符号
  2. 看到就知道什么意思:每个符号的含义对大多数程序员来说应该是显而易见的
  3. 宁可用关键字也不用符号:当符号的含义不够清晰时,用英文单词代替
    • 使用 not / and / or 代替 ! / && / ||
    • 使用完整单词 function 代替缩写
  4. 基础类型小写,引用类型大写
    • 值类型(小写):integerfloatbooleanstringcharacter
    • 引用类型(大写):IntegerFloatBooleanStringCharacter
  5. 固定大小整数类型使用完整短语:如 signed 8bit integerunsigned 32bit integer,不使用 i8 / u32 等缩写
  6. main 函数可选:可以像 Swift 一样直接在文件顶层编写代码,不需要 main 函数
  7. 常量使用连字符(kebab-case):如 MAX-RETRY-COUNT,不使用下划线

设计准则:符号应该是“看一眼就懂“的。如果需要解释,就用英文单词代替。键盘上的每个符号都很宝贵——只用最常见、最直观的那些。

符号组合

一些符号组合在一起形成特殊语法:

符号组合示例名称说明
when/iswhen expr is { ... }模式匹配完整的模式匹配表达式
functionfunction name() { ... }函数定义函数声明语法
typetype Name = ...类型定义类型声明语法
letlet name = value变量声明变量绑定语法
let mutablelet mutable name = value可变变量可变变量绑定语法
if/elseif cond { ... } else { ... }条件表达式完整的 if-else 表达式
`>``value> func