2011年4月28日 星期四

9. Scala 的企圖心,也是它的特性 --Scala 與 Java之間,可以混用

Martin 是 Java 的愛用者,曾經也根據 Java 的缺失,提出一些調整方案(你可以去找找這個老兄的事蹟,這裡不詳加說明)。

既然是 Java 的愛用者, Martin 不會輕易放棄 Java 這個世界的龐大資產。Java 的龐大資產,指的有兩方面,一方面是指所有語言中最多 programmer 的語言,另一方面是指有豐富的 library。

為繼承這兩大的資產,Scala 使用以下的方式來爭取:
1. 為吸引 Java programmer,所以 Scala 的語法精義與 Java 非常相同。
2. 為讓 Scala 的 programmer 使用 Java 豐富的 library, Scala 與 Java 可以混用。

「什麼叫混用?」

Scala compile 出來的東西,是正常的 Java bytecode,可以放到一般 JVM 執行。而且,既有的 Java 程式碼,Scala 可以輕易使用,Scala 的程式碼,Java 程式也可輕易使用。

混用就是一個專案中可以有一些是Java code,一些是Scala Code,兩者混合在一起。Scala 與 Java 者互相把對方當成自己人。

Martin 把 Scala 的 OO 體系設計的非常類似(其實應該是,Scala 的 OO 體系是 Java OO 體系的 superset),以 JVM 角度來看,Scala 編譯出來的 bytecode 是完全正常的 bytecode,與使用 Java compiler 編譯出來的 bytecode 完全相同(當然會有一些額外的method),因此 JVM 無法分辨原始碼是 Java 產生還是 Scala產生的。

以 Scala 程式的角度,Java 所寫出來的 class,就是一般 Scala 的 class,Scala可以直接使用。
其實,在Scala 語言中已經直接使用 Java class。String 這個 class,Scala 並沒有特別加以包裝,而是直接使用 Java 的 String 這個 class,可見得 Scala 把 Java 當成同樣的人看待。

以 Java 程式的角度,Scala 所寫出來的 class,也是一般的 Java 中的 class,所以 Java 可以直接使用。

Java 與 Scala 的互相使用,並不是單純的呼叫,而是可以互相繼承。Java class可以繼承 Scala class,Scala class 可以繼承 Java 的 class,這叫混用。

你可以想像成「Scala 與 Java 世界,兩個是同一個世界,只是 Scala 是 Java 的另一種表達方式」,或是,「Scala 只是另一種語法的 Java」,對你在學習 Scala 會更快入手。

沒有留言:

張貼留言