「Groovyとは何か」を一言で説明するとしたらみなさんどうします?
私の考えでは、「GroovyはJavaの拡張である」というのがシンプルな説明ではないかと思います。
C++がCの拡張であるのと同じように、GroovyはJavaの拡張。
C++がCから拡張された部分を思いっきりおおざっぱに言うと、「オブジェクト指向」でしょう(まあ異論もあるでしょうけれども)。
では、GroovyがJavaから拡張されたのは端的に言って何であるか。つまり、
Groovy = Java + ?
の「?」に何を入れるべきでしょうか。ご存知のように、Groovyは「言語機能の総合デパート」てなもんで、Javaからの拡張機能は分厚い本1冊ぐらいの機能はあるわけです。でもそこからひとつだけ挙げるとしたら、何であるか?
私の考えでは、ここに当てはめるとしたら、
- 動的言語機能
- 簡潔記述
の2つだと思う。(1つじゃねー)
Groovyの文法はJavaのほぼ上位互換です*1。
加えて、GroovyはJavaのオブジェクトモデル、実行プラットフォーム、API、セキュリティモデル、開発ツール、その他を共有しています。「拡張」というのがふさわしいでしょう。
オルタネイティブではなく、別言語ではなく、延長であり、拡張。実際、JavaっぽくGroovyを書いてもいいし。この点がGroovyをJRubyやScalaなどから差別化しています。んで、その場合「拡張だから汚いのだ」という議論や批判も沸き起こってくるかと思います。確かにそーゆうところも微少にはありますが、問題視するほどのものはないと私は思っています。実際調べると、整合性がすごく考えられている。
話は変わりますが、昔は「Cの様にC++を使う人」が問題になりましたよね。将来は、それと同様に、「JavaのようにGroovyを書く人」が現れて困るかもしれませんね。つまり、Groovyを良く知らないでJavaから移行してきて、意図的ではなく、きちんとクラス定義・型指定して「冗長にGroovyを使う」人*2。
ただ、Grailsから使うGroovyに限って言うと、サンプルコードとかがGroovyらしいものばかりだし、grailsコマンドで生成される雛形とかDSLもあるので、表記上はJavaっぽく書く余地がないっすね。
とりとめもなくこのへんで。