位元詩人 [Groovy] 程式設計教學:簡介

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

說明

Groovy 是一個運行在 Java 平台的動態型別 (dynamically-typed)、通用型 (general-purpose) 程式語言。

目前 Groovy 是 Apache 基金會底下的一個開放原始碼 (open-source) 計畫,以 Apache License v2 授權發行。大體上來說,可以放心地將 Groovy 用在商業軟體上,不強迫開發者公開程式碼。實際上,也有不少商業公司使用 Groovy。

雖然 Groovy 在台灣能見度不算高,但 Groovy 在 Java 生態圈中仍有一定地位。像是用在 Java 及 Android 專案管理的 Gradle 就可以用 Groovy 來寫。另外一個常見的用途是使用 Spock 為 Java 專案寫測試程式。

特性

  • Java 平台
    • 運行在 Java 平台,能跑 Java 的系統就能跑 Groovy
    • 可和 Java 函式庫互通
    • 語法上和 Java 相容
  • 語法特性
    • 動態型態語言,但可選擇性加入型態標註
    • 吸收 Python、Ruby、Smalltalk 等語言的特性
    • 函數式程式設計 (functional programming)
    • 撰寫領域特定語言 (domain-specific language)
    • 元程式設計 (metaprogramming)
  • 豐富的生態圈,包括但不限於

益處

大部分程式設計者是因為 Gradle 才接觸 Groovy。寫 Gradle 命令稿可用來管理專案。

要為 Java 專案寫測試程式時,可以用 Groovy 來寫。測試程式不會隨主程式發佈出去,用命令稿語言寫比較省時間。

Groovy 可以當成通用型命令稿語言。需要第三方函式庫時,直接套 Java 函式庫來用。大部分任務都有現成的 Java 函式庫,只要寫命令稿的部分即可。

如果想用 Groovy 寫應用程式,也有 Grails、Griffon 等應用程式框架可以套用,不用自己從頭手刻。

優缺點

Groovy 程式可以直接沿用 Java 函式庫,減少程式設計師重造輪子的時間和心力。Groovy 也可以用來寫 Java 函式庫,供其他 Java 程式使用,但因為效能的考量,實務上不太會這樣做。

在專案中,Groovy 可以和 Java 共存。核心功能用 Java 寫,不需要效能的部分用 Groovy 節省開發時間。

Groovy 語法相對簡潔,難度大概跟 Python、Ruby 差不多,可做為通用型命令稿,尤其在 Windows 這種對 C 不友善的平台上。

但是 Groovy 目前學習資源較少,所以較少程式設計者將 Groovy 當成主力語言。絕大部分 Groovy 使用者都是學會 Java 後,把 Groovy 當成第二語言。

效能

先前 Groovy 因速度過慢而遭人詬病,不過,在 2.0 版後,Groovy 的速度已經改善不少。透過一些最佳化的方法,Groovy 程式的速度僅為 Java 程式的三倍慢左右,對大部分的情境來說,其實也夠用了。

如同本文先前所提到的各種情境。必要的時候,還是可以用 Java 撰寫核心功能,再由 Groovy 呼叫。所以,不太需要擔心這點。

學習成本

雖然 Groovy 號稱簡單易學,但筆者認為其實 Groovy 並不是那麼容易,因為:

  • Groovy 的語法是 Java 語法加上 Groovy 特有語法而成,等於要先學完 Java 語法
  • 大部分的 Java 函式庫預設程式設計者使用 Java,範例和 API 文件都以 Java 使用者的角度撰寫,所以還是要閱讀 Java 程式碼
  • Groovy 的工具鏈是沿用 Java 的。Java 的工具鍵較為複雜
  • Groovy 學習資源較少。大部分 Groovy 學習資源都是以讀者為 Java 程式設計者的前提去撰寫

總之,學習 Groovy 不會省掉學習 Java 的時間。Groovy 是在學完 Java 後,想要用更簡單的程式碼完成相同的任務才去學的語言。

關於作者

位元詩人 (ByteBard) 是資訊領域碩士,喜歡用開源技術來解決各式各樣的問題。這類技術跨平台、重用性高、技術生命長。

除了開源技術以外,位元詩人喜歡日本料理和黑咖啡,會一些日文,有時會自助旅行。