當下,我還在想,他在說什麼?該不會是類似 Jypthon, JRuby 的東西吧?如果是,哪我不如直接學正統一點的?等到我開始接觸後,我發現,不是這麼一回事。相反的,越接觸 Grails ,越發現,不得了啦。我們真的要大大推廣 Grails
Grails 是一種根基於 Groovy, Spring framework 與 Hibernate的 web framework。Grails 把所有要開發網站所需要用到的功能都結合起來了。
Spring framework 跟 Hibernate,這個我相信 Javaer (這是我創造的名詞,就是指使用 Java 的人)都懂。
但是 Groovy 是什麼? 照他官網的說法是:
A multi-faceted language for the Java platform
Groovy is a powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform aimed at multiplying developers’ productivity thanks to a concise, familiar and easy to learn syntax. It integrates smoothly with any Java program, and immediately delivers to your application powerful features, including scripting capabilities,Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming.
Groovy是一個功能強大的、可同時使用動態類別化,與靜態類型和靜態編譯功能。Groovy基於熟悉與容易學習的語法來提昇 Java平台開發人員的生產力。Groovy與任何Java程序無縫接軌,並透過他提供的強大功能,包括 script 功能,Domain class 編寫,運行和編譯時元編程和函數式編程,整合到你的應用程式中。
這樣寫,不知有沒有人會看得懂?如果有人懂,我得說他真的是神人級了。
我用一個比較簡單、膚淺的說明吧:
- Groovy 他的語法 大約與 Java 90% 相容
- Groovy 提供一些簡易的語法,達到 less is more 的特色
- Groovy 具有動態型別,就如同 php, javascript一樣,不必在宣告變數的時候指定變數的型別。你可在指定一個數值(或物件)到一個變數的時候,由Groovy 自動賦予該變數一個型別。(這種特性,老實說,有些人不喜歡,或說不知道如何應用,但它很有用。.NET 有提供這種特性。)
- Groovy也可以當成 script 直接使用,就像是 ruby、python、perl,也可 compile 成 .class 或打包成 jar 執行。他的 .class 是與 java compile 的 .class 100%相容。因為 Groovy 實際上就是用 java 去 compile 的。
- Groovy有一些獨特的語法,類似 ruby、python。
- Groovy可直接使用所有的 java package, 例如 log4j, apache common 套件等等
- Groovy 可使用動態地實做介面
- Groovy 可以為一個物件新增方法。
- 我舉個例子。在使用 java.util.Date 物件時,如果你想要將他顯示成 2015/10/11 的格式的時候,你還要去用 SimpleDateFormat 去轉一次。程式碼看起來就不好看。即便你使用 Apache common packages 也是會讓程式看起來累贅。如果我們能在 Date 物件增加一個方法,例如:Date dd = new Date(2015-1900, 9, 11); System.out.println(dd.toString("yyyy/MM/dd");這樣看起來程式就很精簡了。
以下就簡短的一個例子讓各位了解一下
class Hello { def test() { println "Hello, world, semi-colon following me"; System.out.println "Hello, world, semi-colon not after me" // show a list def digits = [0,1,2,3,4,5,6,7,8] println digits } public static void main(String[] args) { def app = new Hello(); app.test() } }
執行結果如下:
Hello, world, semi-colon following me Hello, world, semi-colon not after me [0, 1, 2, 3, 4, 5, 6, 7, 8]
你是否發現了幾個地方?
- Groovy 程式中,每一行結尾可以不需要加分號
- Groovy 的物件宣告大都使用 'def' ,不需給定物件類型。Groovy 會依照你給定的 value 來假設適當的物件類型給變數
- def 這個 Groovy 的關鍵字是也可用來宣告方法
- Groovy 中,也可使用 Java 的物件(因為 Groovy 基本上就是 Java 的延伸)
但由於我主要是想推廣 Grails ,所我不會經常的介紹 Groovy。只有在必要的時候,我會提到 Groovy 或是介紹 Groovy 的一些神奇的地方。如果你有興趣了解 Groovy,你可以參訪他的官網:http://www.groovy-lang.org/
下一篇,我開始介紹 Grails。
====
留言列表