变量

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

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

常量

对于数字和字符串字面量,可以使用 const 声明来获得一个常量。此种类型的常量将会在编译前求值,因此在运行时会稍微提高效率。

const pi = 3.1415926

默认情况下,不支持表达式的运算,即便表达式中的标识符也是常量。因此一个 const 声明的初始化值如果是表达式,则等同于 final 声明。因为表达式的值在运行时才会运算出来。

这个功能可以在河图 0.4.0 以上的版本中通过编译选项打开。

// 默认情况下等同于 final pi2 = 3.1415926 * 2
const pi2 = 3.1415926 * 2

延迟赋值

对于 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

当你解构声明的值来自数组时,你可以使用 '_' 关键字,忽略某个位置的变量。

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

注意:解构声明不可以延迟初始化,因此只能在函数体或者 ResourceType.hetuScript 类型的代码文件中使用。

Last Updated:
Contributors: 邵燃, hythloday@live.com