uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

Groovyは別に新しい言語ではない

ちょっと刺激的な表題をつけてみました。

たまに聞かれるのが、Groovyというのは新しい言語だから、別の言語だから、つらいね、という話。これは完全な間違いじゃないのですが、あんまり正しくはないです。

GroovyはJavaとほとんど変わらないからです。

というと語弊があるかもしれませんが、正確に言うと、Groovyの文法は基本的にはJavaの上位互換です。 inner classの扱いとか数値の扱いとか、微妙に違ったりはするのですが、Javaとして書けばほぼGroovyとして正しいコードになります。

ただ、もちろん、Groovyでそんな書き方をする人はいません(そうならJavaを使った方がよっぽどマシです)。また、Grailsを使う場合、サンプルコードとかテンプレートジェネレータとかが生成するコードが当然のことながらGroovyらしいものなので、実質的にはJavaっぽく書くことはないでしょう(GrailsではクロージャやDSL主体なので、Javaっぽく書けない)。

いいたいのは、Java文法を知ってればGroovyの文法の8割がたはすでに理解できていることになる、ってことです。Javaの冗長な記述を、適宜略した記法に置き換えていけば、Groovyをある程度使いこなしたことになります。加えて、GroovyはJavaとAPIライブラリを共有し、さらに、JavaVM上で動作し、セキュリティモデル・ランタイムオブジェクトモデルは同一です。「Javaを知ってる」ってことは、「Groovyを知ってる」というのと実質あんまり変わらないのです。

あとはGroovy特有の機能(クロージャ、ビルダー、便利な正規表現、名前引数、)などを覚えていけば良いです。

C++を知ってればJavaは3日で覚えられる、とは昔よく言われたことでした。これには誇張が含まれています。なぜなら、両者は、APIとか、デバッグ技法とか、GCの概念とか、いろいろ違っているわけです。文法はともかく、移行にはそれなりの苦労が伴います。

しかし、Javaを知っていれば、Groovyは三日で覚えられる、は別に誇張でも何でもありません。少なくともある程度書きたいことが書ける、というレベルまで到達するのはごくごく容易です。もちろん、その先にはいろいろと楽しいものがあるわけですが。

  • 関連記事:

 GroovyはJavaの拡張である