本文系 Creating JVM language 翻译的第四篇。
原文中的代码和原文有不一致的地方均在新的代码仓库中更正过,建议参考新的代码仓库。
上一节中,我们已经实现了 Enkel 语言的原型实现。本章我们需要定义好 Enkel 的语言特性。
众所周知,Java 中有很多冗余的部分。Java 尽可能的避免让你犯错,因此我们有时候需要写大量的重复性代码。
我们的目标是让 Enkel 尽可能的简单。简单带来的缺点显而易见,但是对于实现语言原型,是个不错的选择。
下面我们定义了 Enkel 语言的和新特性。
| 特点 | 示例 |
| --- | --- | --- |
| 一个文件代表一个类,无需使用 class 关键字来声明类名,只需要在 import后提供类型 | Car {}|
|继承|Car : Vehicle {}|
|可选的自动生成 getters,setters,builder,equals,hashcode|Car(getters,setters,hashequals,builder) : Vehicle {}|
|类型推断| var x = 5|
|默认参数|fun createPoint(Int x=0, Int y = 0)|
|可选参数命名,这在函数调用指明参数的时候非常有用| createPoint(5,0) createPoint(x->5,y->0) createPoint(y->0,x->5) |
|函数也是对象(函数是一等公民)|const f = (Int x=0, Int y=0) => x*y|
|没有静态方法|static void x()|
| 默认用 == 替代 equals|object1 == object2|