河图脚本语言
指南
语法
  • Dart API
  • 河图 API
  • VS Code 扩展
Github
  • English
  • 简体中文
  • English
指南
语法
  • Dart API
  • 河图 API
  • VS Code 扩展
Github
  • English
  • 简体中文
  • English
  • 语法概要
  • 标识符和关键字
  • 内置类型
  • 特殊语法和操作符
  • 变量
  • 控制流程
  • 函数
  • 枚举类
  • 类
  • 结构体
  • 类型系统
  • 异步操作
  • 导入其他代码文件
  • 严格模式
  • 错误和异常的处理

变量

变量声明以 var, final, late, const 开头,类型注解和初始化值表达式是可选的。除了 var 之外的声明,都无法修改它的值。

var person
var fineStructureConstant: number = 1 / 137
final isTimeTravelSuccessful: bool = true
final skill: List = ['attack', 'defense']

常量

使用 const 关键字可以声明一个编译时常量。支持四种常量类型:布尔、整数、浮点数和字符串。常量值存储在全局去重表中以提升性能 — 相同的常量值共享同一存储。

const pi = 3.1415926
const name = 'Hetu'
const isReady = true
const answer = 42

默认情况下,常量表达式运算不会启用。如果 const 声明的初始化值是一个表达式,则行为等同于 final 声明。

可以通过在 Hetu 配置中设置 computeConstantExpression: true 来启用常量表达式计算(0.4.0 版本之后可用):

// 启用 computeConstantExpression 时,编译时计算:
const pi2 = 3.1415926 * 2

// 未启用时(默认),等价于:
// final pi2 = 3.1415926 * 2

const 与 final 的区别:

  • const 值是编译时常量,存储在去重的全局表中。
  • final 值是运行时赋值后不可变的变量。
  • const 只能持有字面量值(默认);final 可以持有任何运行时的值。

延迟赋值

对于 var 和 final,在没有初始化时直接使用这个标识符,将会得到 null 值。

你可以使用 late 来禁止访问一个未初始化的常量。

late a
// print(a) // Error: [a] is not initialized yet.
a = 42
print(a)
a = 'dragon' // Error: [a] is immutable.

删除

你可以通过 delete 关键字来删除一个变量声明。

var a = 42
delete a
print(a) // error: a is undefined!

但你不能删除一个 class 上的成员。

解构声明

在河图中,为了表达清晰的目的,你不能像 C++/Java 那样在一个声明中写多个标识符。

var a,b,c// error

但你可以使用类似 Javascript/Kotlin 的结构声明。这种声明必须提供一个 Iterable 或者一个 struct/Map 作为初始化值。

var [a, b, c] = [1, 2, 3]; // a = 1, b = 2, c = 3
var { x, y } = { x: 6, y: 7 }; // x = 6, y = 7

使用 _ 忽略值

从列表/Iterable 解构时,使用 _ 跳过不需要的值:

var [_, _, z] = [1, 2, 3]; // z = 3

从 struct 解构

从 struct 解构时,变量名必须与字段名匹配:

final obj = { a: 6, b: 7 }
final { a, b } = obj  // a = 6, b = 7

要求

解构声明必须有一个初始化值,并且必须立即初始化。只能在脚本体(ResourceType.hetuScript)或函数体中使用,不能在类级声明中使用。

异步初始化值

在脚本 (.hts) 或函数体中,可以在变量初始化表达式中使用 await:

// 在脚本或 async 函数中:
final data = await fetchData()
var result = await compute() + offset

但在模块 (.ht) 顶层变量中不支持 await。模块级变量使用延迟初始化(late-initialized),不支持异步挂起。详见 Future & await 文档。

最近更新: 2026/5/2 09:04
Contributors: hythloday@live.com, Ran Shao, 邵燃, chengfubeiming
Prev
特殊语法和操作符
Next
控制流程