Groovy學習筆記(二)—— 從Java到Groovy

以前就有說過,不少人之因此選擇Groovy就是由於其學習成本低,只要你有Java的基礎,學起來至關快。與此對比的是Scala(另外一種JVM動態語言)語法就比較難學(雖然還沒學過,可是網上的評論是這樣的)。java

做爲一個Java程序員,我要逐漸把本身Groovy。python

 

從JDK到GDK程序員

一、JDK做爲Java開發的核心,是全部Java程序員都須要學習和使用的部分。Groovy在設計GDK的時候很是貼心貼心貼心(重要的感情抒發三遍),GDK能夠認爲是JDK的擴展和超集,不少Java API在GDK裏你均可以找到,甚至是Java文件均可以用Groovy編譯運行,這爲混合使用Java和Groovy提供了極大的便利,Java程序員能夠以極低的代價來嵌入Groovy代碼,擴展Java,提升編寫效率。安全

二、Groovy與Java的血緣佐證學習

1 def str = "I'm a String"
2 println str.class.name

運行結果:spa

1 java.lang.String
2 [Finished in 0.7s]

能夠看出,Groovy中的對象其實就是Java對象,雖然它可能已經被擴展了。設計

再來一個例子:code

1 def num = 3
2 num.upto(5){println "$it"}
3 println num.class.name

運行結果:對象

1 3
2 4
3 5
4 java.lang.Integer
5 [Finished in 0.7s]

Groovy擴展了Integer,加入了upto()方法。blog

 

Groovy是輕量化的Java(各類省)

再次重申這一點,主要是由於在學習Groovy的過程當中,常常會有這樣的感嘆「唉,這個居然不須要作了」又或者是「這個居然能夠這麼簡單的寫!」,其輕量、快捷的特色體如今許多方面。

一、安全導航操做符(?.)

Java裏充斥着if (obj != null){obj.doSomething();}的代碼,可是在Groovy裏,僅需obj?.doSomething()。瞬間感受Java弱爆了~

二、分號可省,引用能夠不具名(用def就能夠了)

三、不想catch就不用處理異常,而不是Java裏被throws逼的必須寫

四、return也能夠省

五、getter、setter也省了,相似car.engine實際上是調用car.getEngine()

六、具名參數(不再用記住參數順序了)

七、多賦值(感受學的python,不須要爲了返回多值而建個莫名其妙的類了)

八、經過使用as和asType,代碼塊能夠直接做爲接口的實現被傳入

九、更便捷的循環 例如for(i in 0..100){}

十、靜態導入,導入靜態方法(相似於python,可使用as建立別名),直接經過方法名引用

十一、編譯時不進行類型檢查的範型(Groovy只會在運行時推斷,推斷失敗了就拋異常)

十二、相似於lombok的註解

1三、操做符重載(在設計DSL的時候超級有用)

 

好吧,Groovy也有我討厭的部分(學到目前而言)

一、布爾值的求解

不一樣類型的規則居然還不同,好比Collection非空爲true,Number不爲0等等。隱式就是災難啊!誰知道動態運行時莫明奇妙的拿了個什麼類型的對象拿去判斷,計算布爾值。

 

Groovy設計者給Java程序員挖的坑:

一、Groovy中的==等於Java中的equals()方法,Java中的==用來判斷引用是否相同,在Groovy中對應is()方法

二、Java代碼中若是變量名爲it這樣的Groovy關鍵字,會報錯。

 

簡單總結下,除了一小部分不一樣外,Groovy的語法與Java極爲類似,相互的兼容性很好;Groovy就是Java的動態擴展。

相關文章
相關標籤/搜索