Skip to content

Tea 快速上手 针对 JavaScript 用户

xuld edited this page Jan 7, 2014 · 1 revision

JavaScript 是一个优秀的脚本语言。它代码简明易懂,并且可以跨平台运行,初学者可以很快上手。 Tea 语言在很多方面都和 JavaScript 非常接近,但同时它又是高效的编程语言,可以以此弥补 JavaScript 效率低、功能不全的缺点。

开始:编译第一个程序

1. 下载 Tea 编译器

2. 新建如下文件,并命名为 hello.tea

void main(){
    >> "hello world";
}

其中:

void main() 表示这是一个函数定义,这个函数的返回类型是 void 。所有代码都必须放在函数主体内部,程序将首先执行名为 main 的函数。

>> 表示调试输出操作,它会输出其后的表达式的值。

3. 使用如下命令,进行编译

tea hello.tea -o hello.teaexe

4. 编译器将会生成 hello.teaexe 文件,然后调用如下命令执行它:

tea hello.teaexe

此时会在控制台看到输出了 hello world

5. 编译为独立的可执行文件。

对于 Windows 用户,可以使用如下命令将 teaexe 转换为等效的 exe 文件。

tea hello.teaexe -o hello.exe

或者,也可以直接根据源码生成 exe 文件:

tea hello.tea -o hello.exe

类型

基础类型

Tea 语言和 JavaScript 最大区别在于它是一个强类型语言:一切对象都有类型。

常见的基础类型有:

int      整数
double   小数
bool     布尔
string   字符串
object   动态类型
void     空类型(主要用于函数返回值为空时)

所有变量定义、参数定义都需要前缀类型名:

int fn(int p){       //  相当于 JavaScript 的: function fn(p) {
    return p + p;
}

void main(){
    int i = 1;
    >> fn(i);
}

复合类型

复合类型是将基础类型进行组合而得到的新类型。

数组

Tea 中的数组和 JavaScript 的 Array 不同,它是有固定长度的,数组一旦创建,长度将不能变化。 数组内的元素也都必须有相同的类型。

如定义一个由多个 int 组成的长度为 3 的数组:

int[] arr = new int[3]; // 相当于 JavaScript 的: var arr = new Array(3);
>> arr[2]; // 输出数组第 3 个元素的内容。 

列表和字典

列表类似数组,但是可以动态扩展长度;字典则可以根据键获取值。

List<int> list = new List<int>(); // 创建一个 int 组成的列表。相当于 JavaScript 的 var list = [];

list.add(1); // 向列表添加一项。相当于 JavaScript 的 list.push(1);

>> list.length // 相当于 JavaScript 的 alert( list.length )


Dict<string, int> dict = new Dict<string, int>(); // 创建一个键是 string 、值是 int 的集合。相当于 JavaScript 的 var dict = {};

dict["key"] = 1; // 相当于 JavaScript 的 dict["key"] = 1;

函数

void fn(int p) {
    >> p;
}

void main(){
    Func<void, int> f = fn; // 相当于 var f = fn;
    f(1);
}

简写对象创建

通过内置的语法支持,可以快速创建数组、列表、字典和函数的实例。

int[] arr = [1, 2, 3];

List<int> arr = [1, 2, 3];

Dict<string, int> dict = {a: 1, b: 2};

Func<void, p> f = (p) -> { >> p; } // 相当于 JavaScript 的 var f = function(p){  alert(p)  }

动态类型

如果一个变量的类型是未知的,或者它可能在运行时具有多种类型,使用 object 代替。

object a = []
>> a.length;

简写类型声明

咋所有需要使用类型的地方,都可以使用 var 关键字来代替,编译器会负责自动推导类型。如:

var arr = [1, 2, 3];

语句和表达式

Tea 和 JavaScript 的语句基本相同:

void main(){
    
    for(int i = 0; i < 10; i++) {
        if(i % 2 == 0) {
            >> i;
        }
    }

}

as 操作符和 is 操作符

void main(){
    var a = 1;
    >> a is int; // 相当于 JavaScript 的 typeof(a) == "number"
    
    >> a as bool // 将 a 转为等效的 bool 类型。
}

系统库

就像 JavaScript 中, document 是浏览器提供的对象,以实现具体的功能。 Tea 内置提供了 system 包。

void main(){
    system.IO.deleteFile('E:\file\a.txt');
    system.IO.moveFile('E:\file\a.txt', 'E:\file\b.txt');
    system.Console.writeLine('操作完成');
}

使用 import 简化前缀

对于公共的前缀,可以使用 import 简化:

import system;

void main(){
    IO.deleteFile('E:\file\a.txt');
    IO.moveFile('E:\file\a.txt', 'E:\file\b.txt');
    Console.writeLine('操作完成');
}