Eclipse Xtend對Java說:我幫你瘦身

jopen 13年前發布 | 8K 次閱讀 Eclipse

Java 程序員在使用 Ruby 編程時會有一種解放的感覺,一種從 Java 那繁瑣的語法環境進入一個無拘無束、自由國度的感覺。隨著 Clojure 和 Scala 等新語言的出現,這種對比的感覺會越來越強烈。Ruby 在很短的時間里異軍突起,很大的原因在于它的簡潔和自由,比如下面一句代碼:

File.new("testfile") .each {|line| puts line[-1] }

如果用 Java 來寫,不知道要寫多少行。Bruce Tate 在《七周七種語言》這本書中譴責 Java 說:“我的手指在流血,因為我不得不打出這樣多的代碼;我的眼睛在流血,因為我還要去讀它們。”呵呵,說的很形象。

其實,Java 并不是誠心在為難程序員,它一直在改進。而 Eclipse 基金會推出的一種叫做 Xtend 語言正是為了要簡化 Java 的語法,減輕 Java 程序員的負擔。

Xtend-logo

又一種新語言?不要擔心。Xtend 更像是一種模板語言。它緊密的和 Eclipse IDE 捆綁在一起,要使用它,你需要安裝 Eclipse 的 Xtend 插件,Xtend 代碼并不是直接編譯成 JVM 字節碼的,當你在 IDE 編輯、保存 Xtend 代碼時,它會自動的編譯成相對應的 Java 代碼。

xtend-and-java

在上圖的右邊窗口里,你可以檢查生成的 Java 代碼是不是符合你的預期,并可以通過它調試你的程序。

那 Xtend 究竟能幫助 Java 程序員做什么呢?面面俱到的介紹一種新語言是一種很復雜的事,我也不想考驗各位的耐心。這里只舉例說明幾個大家一眼就能看出這種語言存在的價值的例子。

1. 類型推測

在 Java 里很多的表達式中,根據語句的右邊的代碼完全可以推導出左邊的類型,比如下面的 Java 語句:

//Java List names = getTheListOfNames ()

而在 Xtend 語言里,你就不必再聲明左邊的類型,直接寫成:

val names = getTheListOfNames ()

在 for 循環里可以寫成這樣:

for (name : getTheListOfNames ())

2. 對象屬性訪問方式的簡化

在 Java 里,對象屬性的訪問一般都是借用 set 和 get 方法實現的,在 Xtend 里,你可以直接這樣寫:

person.name

而不需要寫成:

person.getName ()

賦值方法也是:

person.name = "Foo"

等同于

person.setName ("Foo")

還有一個特征很像 Ruby 里的用法,對于一個方法的調用,你可以寫成這樣:

obj.compute

而不需要寫成:

obj.compute ()

3. Switch 語句

這條我不說,估計大家也都會明白。Java 里的 switch 語句只能接受數字或 char 類型的判斷參數,而在 Xtend 里,沒有這種限制:

val Shape shape = ...switch (shape) {
  Rectangle case shape.width == shape.height :
     "Square ("+shape.width+")"
  Rectangle :
     "Rectangle ("+shape.width+" x "+shape.height+")"
  Circle :
     "Circle ("+shape.diameter+")"
  default :
       "Don't know"
}

4. 模板表達式

在 Xtend 里,定義一個字符串,你可以寫成這樣:

val msg =  'This is some multi line
          text with "double quotes" in it'

請注意,這個字符串可以是多行的。

而在使用這個變量時, 你可以寫成:

def print_line (String msg)'''
      

< >

'''

變量直接嵌入文本里!很像 PHP 或 Ruby 里的寫法。

5. 閉包

我最后介紹的當然也是最強大的一個功能了,閉包。據說 Java 會在 xxxx (xxxx <=3000)年之前加入閉包功能,不過你不用等了。我們來看看 Xtend 里如何實現閉包:

val predicate = [ Person person | "Hans" == person.name ]
persons.filter (predicate)

這個閉包是用來實現過濾 persons 集合里 person.name=”Hans”的功能的。怎么樣,有點函數式編程語言的感覺吧。

Xtend 里還有很多的語言特征,這里就不一一敘述了,有興趣的朋友可以閱讀官方網站提供的 HTML 在線文檔,或下載 PDF 版的文檔

通過上面的介紹,你的 Xtend 的感覺如何?

附:下面是 Xtend 官網上提供的一個介紹視頻:


來自: 外刊IT評論

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!