手拉手教你實現一門程式語言 Enkel, 系列 4

KevinOfNeu發表於2018-09-06

本文系 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

相關文章