Files
Endorphin-Document/guide/08-expressions-and-bindings.md
T

2.7 KiB
Raw Blame History

8. 表达式与绑定

表达式描述计算并产生值。let 将表达式结果绑定到局部名称,后续表达式可以使用这个结果。

8.1 表达式形式

本文语法包含以下表达式:

形式 示例 含义
字面量 100、"商品"、.title 直接表达一个值
名称引用 amount 使用已解析的名称
一元表达式 -4 对值使用一元负号
算术表达式 100 - 10 计算数值
成员访问 product.price 使用字段或成员
调用 discountedPrice(100, 10) 调用逻辑并取得结果
分组 (100 - 10) * 2 改变表达式组合方式

具体名称和成员必须存在并符合类型要求。调用的参数和返回规则见函数与调用。

8.2 运算与优先级

从高到低的组合顺序为:

顺序 形式
1 分组中的表达式
2 成员访问与调用
3 一元负号
4 乘法、除法
5 加法、减法

同级二元算术运算在本文草案中按从左到右组合。100 - 10 * 2 先做乘法,结果为 80;(100 - 10) * 2 的结果为 180。

数值溢出、除法、隐式转换和其他运算符的规则见规范状态。

8.3 let 绑定

函数体片段:

let amount = 100 - 10
let payable = amount - 5

第一行将结果 90 绑定到 amount,第二行使用它得到 85。每个绑定包含关键字 let、局部名称、等号和表达式。

let 是结果绑定,不是 namespace 声明。本文函数文法将绑定放在函数体内;顶层绑定、重新赋值与可变性不由该语句推导。

8.4 成员访问

值.成员名 访问该值的字段或其他可用成员。类型检查决定访问是否合法。

product.price 使用 Product 的字段。Product.get(...) 则在形式上是先找到类成员,再调用;成员调用的形式不会自动为 Product 创建 get 方法,详见数据读取。

8.5 结果依赖

当一个表达式使用前一个调用的结果时,存在数据依赖:

第一次调用 → 结果绑定 → 使用该结果的第二次调用

inflight 必须在结果可用后使用它,不能将未就绪状态替换为伪造成功值。Preflight 检查表达式结构与类型,不能据此保证所有实际调用成功。

表达式是否带有业务修改效果,以及失败、等待与取消的表示方式,由调用语义定义。算术的组合顺序不自动确定所有调用参数的求值顺序。

上一章:类型与类 · 下一章:函数与调用 · 目录