以前就有說過,不少人之因此選擇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的動態擴展。