-
Notifications
You must be signed in to change notification settings - Fork 1
Tea 快速上手 针对 JavaScript 用户
JavaScript 是一个优秀的脚本语言。它代码简明易懂,并且可以跨平台运行,初学者可以很快上手。 Tea 语言在很多方面都和 JavaScript 非常接近,但同时它又是高效的编程语言,可以以此弥补 JavaScript 效率低、功能不全的缺点。
void main(){
>> "hello world";
}
其中:
void main()
表示这是一个函数定义,这个函数的返回类型是 void 。所有代码都必须放在函数主体内部,程序将首先执行名为 main 的函数。
>>
表示调试输出操作,它会输出其后的表达式的值。
tea hello.tea -o hello.teaexe
tea hello.teaexe
此时会在控制台看到输出了 hello world
对于 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;
}
}
}
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 system;
void main(){
IO.deleteFile('E:\file\a.txt');
IO.moveFile('E:\file\a.txt', 'E:\file\b.txt');
Console.writeLine('操作完成');
}