Apache Groovy 2.6でJava8の文法が使える!
表題の通りなのですが、ParrotブランチでGroovy3を垣間見るで示されている内容が、Groovy2.6(2017/09/06時点ではalpha-1)の時点で利用できるようになりまりた。
ざっくりというと、Java8の新構文(lambdaとか)や、Java7で導入されたtry-with-resources
が利用できるようになったりなど、Groovyがより一層Javaとの親和性を高める内容になっています。
まだアルファ版なので今後変化する可能性が有りますが、具体的に何が変るのかに関しては、上記の記事や、公式のRelease notes for Groovy 2.6に網羅されています。
現在ベータ版が提供されているGroovy2.5
ではまだ新パーサは提供されていないのでこの内容は該当しません。
Groovy2.6
からは、オプションとして-Dgroovy.antlr4=true
を指定してGroovyを利用することで、Java8のlambda文などがそのまま利用できるようになります。
そして、Groovy3
からはデフォルトでこのオプションがオンにる予定です。
実際にSDKMANで、2.6-alpha1を試してみました。
なお、GroovyConsoleを使いたかったので、-Dgroovy.antlr4=true
をJAVA_OPTS
に格納しています。
# 先ずはインストール [koji:~]$ sdk install groovy 2.6.0.alpha-1 [koji:~]$ sdk use groovy 2.6.0-alpha-1 # JAVA_OPTSに今回のオプションを追加する [koji:~]$ echo $JAVA_OPTS [koji:~]$ export JAVA_OPTS="-Dgroovy.antlr4=true" [koji:~]$ echo $JAVA_OPTS -Dgroovy.antlr4=true [koji:~]$ [koji:~]$ groovyConsole&
以下のように、lambda式がそのまま使えます!
def primes = [1,2,3,4,5] Collections.sort(primes, (a, b) -> { return b - a; }); assert primes == [5,4,3,2,1]
これで再びGroovyがJavaとほぼ同等、と胸を張って言えるようになります。
が、Java9の登場と今後のJava言語のロードマップが示されたことで、今後はGroovyに限らずJVM上で動いてる各種JVM言語に様々な影響を及ぼすと考えられます。
それに関しても色々調査していきたいと思います。