Skip to content

Latest commit

 

History

History
98 lines (80 loc) · 3.09 KB

basic_types.md

File metadata and controls

98 lines (80 loc) · 3.09 KB

基本类型

介绍

为了能够通过 Darabonba 生成各语言对应的代码,我们需要能够处理最通用的数据单元:数字、字符串、布尔值、字节序列等。

布尔值

最基本的数据类型就是简单的 true/false 值,在 Darabonba 里叫做 boolean

var bool: boolean = true;

数值

在 Darabonba 中数值的类型最基础的就是 number 这样的通用类型,除了支持这种通用类型,Darabonba 还支持通过字面量定义更准确的类型 long、float、double。

var num: number = 123;
var numLong: number = 123456L;
var numFloat: number = 1.23;
var floatLiteral: number = 1.23f;
var numDouble: number = 1.23d;

在 Darabonba 中还支持更多的数值类型,目前只支持赋值 null 给这些类型的变量。

var intNum: integer = null;
var int8Num: int8 = null;
var uint8Num: uint8 = null;
var int16Num: int16 = null;
var uint16Num: uint16 = null;
var int32Num: int32 = null;
var uint32Num: uint32 = null;
var int64Num: int64 = null;
var uint64Num: uint64 = null;
var longNum: long = null;
var ulongNum: ulong = null;
var floatNum: float = null;
var doubleNum: double = null;

按数据的比特长度来区分,Darabonba 多种详细的数据类型如下表所示。

长度 有符号 无符号 浮点型
8 int8 uint8
16 int16 uint16
32 int32 uint32 float
64 int64/long uint64/ulong double

字符串

像其它语言里一样,我们使用 string 表示文本数据类型。 和 JavaScript 一样,可以使用双引号(")或单引号(')表示字符串。

var name: string = 'jackson';
name = 'peze';

你可以使用模版字符串,它可以定义多行文本和内嵌表达式。 这种字符串是被反引号包围(`),并且以${ expr }这种形式嵌入表达式

var name: string = `page`;
var age: number = 27;
var sentence: string = `Hello, my name is ${ name }.

I'm ${ age } years old.`;

目前暂时不支持通过如下的方式来达到同样的效果:

var sentence: string = "Hello, my name is " + name + ".\n\n" +
"I'm " + age + " years old.";

字节序列

Darabonba 提供了字节序列,目前只支持赋值 null 给 bytes 类型的变量。

var data: bytes = null;

readable

Darabonba 定义了 readable 类型来为流式数据的传输提供了支持,可以将字符串赋值给 readable 类型的变量。

var readStream: readable = null;

writable

Darabonba 定义了 writable 类型来为流式数据的传输提供了支持,目前只支持赋值 null 给 writable 类型的变量 。

var data: writable = null;

Any

有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。那么我们可以使用 any 类型来标记这些变量:

var anyVal: any = 4;
anyVal = "maybe a string instead";
anyVal = false;