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.border="1" Height :
"Square ("+shape.width+")"
Rectangle :
"Rectangle ("+shape.width+" x "+shape.border="1" 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
val predicate = [ Person person | "Hans" == person.name ]
persons.filter(predicate)
這個閉包是用來實現過濾persons集合裏person.name=”Hans”的功能的。怎麼樣,有點函數式編程語言的感覺吧。
Xtend裏還有很多的語言特徵,這裏就不一一敘述了,有興趣的朋友可以閱讀官方網站提供的HTML在線文檔,或下載PDF版的文檔。
通過上面的介紹,你的Xtend的感覺如何
-------------------------------------------------------------------------------------------------
移動開發者大會:Android開發者將越來越賺錢 海量Android教程、開發資料和源碼
10類最急需IT人才:Java開發者居首 給將成爲“Android高手”的10個建議
成爲Java高手的25個學習目標--非常經典 Android 4.1果凍豆新特性詳解
芯片巨頭海思和展訊:給中國芯片業帶來信心 海量經典Java教程、學習資料和源碼
Java侵權訴訟Google獲勝,Android厚積薄發 面試必備:Android筆試總結
Android高手必須掌握的28大內容和10個建議 Android平臺研發人才缺口30萬
Android開發環境安裝和配置步驟詳細圖解 2012國內移動App開發者大調查結果
Windows 7下搭建android開發環境步驟圖解 Android 4.0的30個突出的新特性
Android高手要經過的6個階段和6個境界 linux下搭建Android開發環境步驟
從IT菜鳥變爲“IT骨幹開發者”的11個建議 程序員編程技術迅速提高的終極攻略
2012世界各國人均GDP排名,中國超泰國 2012年全國各省平均工資排行
2012年中國大學高校排行榜(580強排名) 中國各省市面積和人口數量排名
中國百萬開發者大調查:程序員的薪水不錯 Java高手需要越過的10座高山
周立功談嵌入式:我的25年嵌入式生涯 Android和Java語言的異同和關係
華爲中國區手機銷量達千萬,80%爲智能機 谷歌Android碎片化嚴重
2012年中國各省GDP和人均GDP排名 90後就業“錢景”:IT仍是最佳選擇
2012全球城市競爭力500強,69箇中國城市上榜 不要做浮躁的軟件工程師
2012年世界500強,79家大陸香港臺灣公司上榜名單 給IT新兵的15個建議
美國知名科技公司入門級軟件工程師的薪水排名 回顧Java經過的風風雨雨
71道經典Android面試題和答案--重要知識點都涉及到了