close
如果你是 Java 使用者,你是否曾經覺得空虛覺得寂莫、覺得冷, 羨慕 Python, Ruby, Ruby on Rails 那種簡潔有力的語法呢?
曾經,我想要遠離我熟悉的 Java,跳到 Python, Ruby 的世界,去擁抱那我期待很久的程式系統。
當我在研究 Python、Ruby ,為了要選擇哪一個為新的學習標的的時候,有一位神人級的朋友說「你有用過 Grails 嗎?那跟 Ruby 有點類似,但是跟 Java 相容,可以使用 Java 的 package」

當下,我還在想,他在說什麼?該不會是類似 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 powerfuloptionally 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 編寫,運行和編譯時元編程和函數式編程,整合到你的應用程式中。

這樣寫,不知有沒有人會看得懂?如果有人懂,我得說他真的是神人級了。

我用一個比較簡單、膚淺的說明吧:

  1. Groovy 他的語法 大約與 Java 90% 相容
  2. Groovy 提供一些簡易的語法,達到 less is more 的特色
  3. Groovy 具有動態型別,就如同 php, javascript一樣,不必在宣告變數的時候指定變數的型別。你可在指定一個數值(或物件)到一個變數的時候,由Groovy 自動賦予該變數一個型別。(這種特性,老實說,有些人不喜歡,或說不知道如何應用,但它很有用。.NET 有提供這種特性。)
  4. Groovy也可以當成 script 直接使用,就像是 ruby、python、perl,也可 compile 成 .class 或打包成 jar 執行。他的 .class 是與  java compile 的 .class 100%相容。因為 Groovy 實際上就是用 java 去 compile 的。
  5. Groovy有一些獨特的語法,類似 ruby、python。
  6. Groovy可直接使用所有的 java package, 例如 log4j, apache common 套件等等
  7. Groovy 可使用動態地實做介面
  8. Groovy 可以為一個物件新增方法。
    1. 我舉個例子。在使用 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。

====

arrow
arrow

    grails 發表在 痞客邦 留言(0) 人氣()