【在主畫面加入捷徑】
       
【選擇語系】
繁中 简中

[Groovy] 程式設計教學:寫第一個 Groovy 程式

【分享本文】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
【贊助商連結】

    在上一篇文章中,我們談到關於 Groovy 開發環境的建置,相信各位讀者都能順利建置環境。接著,我們要開始實際撰寫 Groovy 程式及建立 Groovy 專案。

    Hello World

    一般程式語言的書,都先用 Hello World 程式熟悉撰寫程式的流程,本文也不例外。首先,用編輯器或 IDE 建立 hello.groovy 文字檔案,並加入以下內容:

    public class Hello {
        public static void main(String[] args) {
            System.out.println("Hello World");
        }
    }

    執行此程式:

    $ groovy hello.groovy
    Hello World

    眼尖的讀者可發現,這根本就是 Java 版的 Hello World 程式。這是由於 Groovy 刻意在語法上接近 Java,雖然不是 100% 相容 Java ,很多 Java 的語法在 Groovy 內也通用。不過,Groovy 有更簡潔的寫法,將 hello.groovy 修改如下:

    println "Hello World"

    這個 Groovy 程式也可以執行,而且和先前的程式效果相同。這是因為 Groovy 設計上接近 Python 及 Ruby,不需要主函式,而以命令稿本身做為程式的進入點。由於 Groovy 程式要在 Java 平台上運行,在 Groovy 內部,其實還是將這個程式轉為有主函式的版本,但平常使用下,不需要知道轉換的細節。

    Groovy Shell

    有時候,我們只是想嘗試一下 Groovy 語法,但不想開編輯器,這時候,可以用 groovysh 指令進入 Groovy Shell。這是一個互動式的 REPL (Read-Evaluate-Print-Loop) 環境,在一些現代的主流程式語言中很流行,像是 Python 或 Ruby 都有這種模式。

    在終端機輸入 groovysh 進入 Groovy Shell:

    $ groovysh
    Groovy Shell (2.4.12, JVM: 1.8.0_141)
    Type ':help' or ':h' for help.
    -------------------------------------------------------------------------------
    groovy:000>
    

    在大於 > 符號後即可輸入 Groovy 程式碼,前綴冒號的指令則是 Groovy Shell 特有的指令,像是輸入 :exit 或是 :quit 即可離開 Groovy Shello。

    我們看一下以下兩行 Groovy Shell 命令:

    groovy:000> "Hello World"
    ===> Hello World
    groovy:000> println "Hello World"
    Hello World
    ===> null
    groovy:000>
    

    在第一個指令中,我們僅輸入 “Hello World” 字串,此環境就回傳 “Hello World” 字串;但在第二個指令中,系統先印出字串,卻回傳 null (空值),因為在 Groovy 程式中,其實 println 指令沒有回傳值,故回傳 null

    我們也可以把 Groovy 當成簡易型計算機:

    groovy:000> (1 + 2) * (4 - 2)
    ===> 6
    

    當然,Groovy Shell 主要只是用來試語法,無法取代真正的開發環境。

    Groovy Console

    如果覺得前述的 Groovy Shell 是終端機軟體,用得不習慣,也可以用圖形介面的 Groovy Console,這個軟體可以當成簡易的 Groovy 編輯器,只是要嘗試一下語法可以使用。

    Groovy web console

    Groovy web console 是一個網站,可以線上練習 Groovy 語法,偶爾要試語法時,也是另一個不錯的選擇,讀者可自行嘗試。

    建立專案

    先前,我們只將 Groovy 程式寫在命令稿 (script) 中,對於簡單的檔案這樣子還沒什麼問題,但是,當程式規模變大,我們就希望以專案管理 Groovy 程式碼。目前有幾種管理專案的方式:

    • 透過特定 IDE 來建立專案,如 Eclipse 或 IntelliJ IDEA
    • 透過不限於特定 IDE 的編譯工具,如 Maven 或 Gradle

    雖然說前者對初學者來說比較簡單,以長遠的角度來說,還是要學 Gradle 等編譯工具,因為要和別人合作時,大家不一定都用同一種 IDE;日後要分享程式碼時,也傾向將其轉為 Maven 或 Gradle 專案。目前 Java 生態圈主流的編譯工具是 Gradle,同時也有專案管理的功能;Gradle 也可以用來建立 Groovy 專案。

    根據程式的性質,可以將 Groovy 專案分為兩類:

    • 應用程式 (application)
    • 函式庫 (library)

    前者可直接在電腦內執行,以達成某些特定的功能;後者無法直接執行,而是預先寫好一些程式碼,將其包裝起來,待其他應用程式 (或函式庫) 來呼叫。一開始練習時,我們撰寫的都是直接在終端機執行的應用程式,不會馬上撰寫函式庫。

    以 Gradle 建立 Groovy 專案,以類 Unix 系統為例:

    $ mkdir myapp
    $ cd myapp
    $ gradle init --type groovy-application

    若讀者是用 Windows 系統,可用以下等效的指令:

    C:\> md myapp
    C:\> cd myapp
    C:\> gradle init --type groovy-application

    建立完專案後,試著執行該專案:

    $ gradle run
    
    > Task :run
    Hello world.
    
    BUILD SUCCESSFUL in 0s
    2 actionable tasks: 1 executed, 1 up-to-date

    第一次執行該指令時,會耗費比較久的時間,因為需要下載一些檔案,第二次以後再執行就會比較快。

    tree 指令觀察一下專案結構:

    $ tree
    ├── build/
    ├── build.gradle
    ├── gradle/
    ├── gradlew
    ├── gradlew.bat
    ├── settings.gradle
    └── src
        ├── main
        │   └── groovy
        │       └── App.groovy
        └── test
            └── groovy
                └── AppTest.groovy

    專案內有數個檔案,說明如下:

    • build/ 資料夾:編譯出的內容,該資料夾內的內容不宜手動處理,可用 Gradle 指令清空
    • *build.gradle*:用來管理 Gradle 專案的主要命令稿
    • gradle/ 資料夾:僅是用來將 Gradle 附帶到專案中,不需手工處理
    • gradlew 和 gradle.bat:當系統上沒有 Gradle 時,可以用該命令稿代替,不需手工處理
    • *setting.gradle*:一些 Gradle 專案的設定
    • src/ 資料夾:實際撰寫程式碼的地方

    通常,我們在將程式碼寫在 src/ 資料夾即可,僅在需要時去調整 build.gradle 和 setting.gradle 即可,其他的檔案和資料夾都不需更動。

    加入 Fat JAR 支援

    原先 Java 沒有模組的概念,後來出現 JAR 這種檔案格式,可用來代替模組。而 fat JAR 是指將所有相依的 JAR 重新打包在同一個 JAR 中,之後這個 JAR 就可以單獨使用。對於 Java 程式來說,fat JAR 很方便,只要將一個單一的 JAR 傳到另一台有裝 Java 平台的電腦,就可立即使用。

    在我們前述的專案中,預設的 JAR 不是 fat JAR,要透過外掛的功能才能達成,所以我們要加入 shadow JAR 這個外掛。在 build.gradle 的最上方加入以下敘述:

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
        }
    }
    
    apply plugin: 'com.github.johnrengelman.shadow'

    執行相關的任務:

    $ gradle shadowJar

    編譯成功後,執行此 JAR 檔案:

    $ java -jar build/libs/myapp-all.jar
    Hello World.

    說實在的,Gradle 對初學者來說不太容易學習,尤其對完全不熟 Groovy 的使用者,要馬上自在地讀和寫 Gradle 命令稿也有一定難度。如果讀者覺得 Gradle 過難,不妨暫時先以單純的 Groovy 命令稿或是以 IDE 所建立的專案為主,待學習 Groovy 一段時間後,再回頭學 Gradle 會比較容易上手。

    經過本文的介紹,相信各位讀者已經有一些撰寫 Groovy 程式的經驗。接下來,在後續的文章中,我們會開始介紹 Groovy 的語法。

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【贊助商連結】
    標籤: GROOVY, JAVA
    【贊助商連結】
    【分類瀏覽】