[Groovy] 程序设计教学:使用考量

PUBLISHED ON DEC 27, 2018 — PROGRAMMING

    在上一篇文章中,我们对 Groovy 做了一个初步的介绍,相信读者对 Groovy 已经有一些初步的概念。在这一篇文章中,我们讨论一些使用 Groovy 所要考量的点,读者可以考虑是否要将 Groovy 用于自已的项目中。

    首先,Groovy 不会取代 Java,也不会和 Java 竞争,毕竟 Java 平台是 Groovy 的母体。大部分 Java函数库仍是以 Java 撰写,即使我们用 Groovy 撰写函式库,也可以转为 Java 通用的套件格式,供其他 Java 程序使用。由于大部分网络上的 Java 相关函式库的范例和 API 仍使用 Java,仍然要会看 Java 程序代码。不过,比起其他的 Java 平台语言,Groovy 算是在语法上最接近 Java 的,某种程度上降低了入门的门槛。

    在 Java 平台语言中,速度往往不会是最重要的考量。比起其他的 Java 平台语言,Java 本身仍然是最快的,但是这些 Java 平台语言并没有消失,仍然有一定的使用人口。而且,Java 平台语言不会自绝于 Java 之外,通常会提供某种和 Java 程序及函式库互通的方法。对于需要效能的部分,仍然可以回头撰写 Java,再从其他 Java 平台语言调用。

    在 Java 平台上,有许多 Java 平台语言,以下数种是较为常见的:

    • Scala
    • Groovy
    • Kotlin
    • Clojure
    • Jython (移植 Python)
    • JRuby (移植 Ruby)

    不同的语言,代表不同的需求,像是 Clojure 带有强烈的 Lisp 色彩,Scala 融合面向对象和函数式两大程序设计模式 (paradigm),Jython 和 JRuby 则分别吸引 Python 和 Ruby 的使用者转而投入 Java 平台。而 Groovy 刻意地和 Java 语法接近,提供 Java 程序设计者一个相对平滑的学习曲线。至于最近走红的 Kotlin,则是因为其语法较 Java 好,又可执行在旧版 Java 平台上,因而受到 Android 程序开发者的喜爱。

    在这些语言中,前四者是相对较多人注目的,但 Groovy 不是最热门的程序语言,可见以下的图表:

    如果去查一些语言排名网站,也可以发现 Groovy 不是 top 级的语言,为什么还要学习 Groovy 呢?笔者认为首要的原因是 Gradle,这是目前 Java 平台主流的编译工具,像是 Android Studio 即是采用 Gradle 做为其项目管理工具。先前 Java 生态圈使用 Ant 和 Maven 这两套编译工具,这两套都是 XML 为基础的项目管理工具,然而,从先前的经验可知,XML 相对不易使用。Gradle 改以 Groovy 为基础所开发的 DSL (domain specific language),才解决了这个议题。

    除了 Gradle 以外,还有一些项目值得注意,像是用于网页程序的 Grails 框架和桌面程序的 Griffon 框架等。由于网页程序和桌面程序是做为使用者接口,往往不会是效能瓶颈的部分,将这些使用者接口的部分使用 Groovy 开发,而仅在需要效能的部分改用 Java。除了一开始必需的学习时间以外,长期来说,这样的模式反而更节省开发时间。

    由于现行主流 Java 相关 IDE 的支援,Groovy 程序代码可以和 Java 程序代码混在同一个项目,通常核心功能仍是用 Java 开发,但是测试程序等非主要程序代码的部分就可以转用 Groovy 撰写,不论是用 JUnit 或是 Spock 皆可。和先前所述的概念相似,结合不同程序语言的长处,省下开发所费的心力。

    对于撰写应用程序来说,静态类型语言较为合适,因为可以透过语法和类型检查提前找出错误。然而,对于某些任务,像是文字处理 (text processing)、数据分析 (data analysis)、工作流程自动化 (workflow automation) 等,静态类型反而带来过多的限制;像是目前主流的数据分析用语言,如 Python 或 R,都是动态类型语言。这时候,Groovy 可以做为一个动态类型语言的方案,同时仍继续沿用 Java 生态圈的函式库。

    先前 Groovy 因速度过慢而遭人诟病,不过,在 2.0 版后,Groovy 的速度已经改善不少。透过一些最佳化的方法,Groovy 程序的速度仅为 Java 程序的三至五倍慢左右,对大部分的情境来说,其实也够用了。必要的时候,我们还是可以回头撰写 Java 程序,所以,不太需要撰心这点。

    透过本文的叙述,相信各位读者已经对 Groovy 的使用时机有一些想法,对于要将 Groovy 用在自己的项目更有信心。在下一篇文章中,我们将实际建置 Groovy 开发环境,做为撰写 Groovy 程序的准备。

    你或许对以下产品有兴趣
    TAGS: GROOVY, JAVA