歡迎您光臨本站 註冊首頁

Eclipse Xtend對Java說:我幫你瘦身

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

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

 

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

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

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

又一種新語言?不要擔心。Xtend更像是一種模板語言。它緊密的和Eclipse IDE捆綁在一起,要使用它,你需要安裝Eclipse的Xtend插件,Xtend代碼並不是直接編譯成JVM位元組碼的,當你在IDE編輯、保存Xtend代碼時,它會自動的編譯成相對應的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)'''        <h1><<msg>></h1>  '''

變數直接嵌入文本里!很像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官網上提供的一個介紹視頻:

 

 




[火星人 ] Eclipse Xtend對Java說:我幫你瘦身已經有588次圍觀

http://coctec.com/docs/program/show-post-71434.html