Javaで実装されたスクリプト言語といえば、BeanShell,Rhino, Jythonなどが有名ですね。僕はBeanShellが好きで結構使い込んでいたのですが、メソッド呼び出しにかっこをつけたりするのがだるくなってくることがありました。
このあたりの記述の簡単さ関してはGroovyのほうがよさそうです。GroovyはJavaに似た文法 + Rubyのような文法を特徴とするスクリプト言語で、僕のように仕事でJavaを使うRuby好きにはたまらない仕様となっております。
一番の特徴はなんといってもクロージャが使えることで、以下のようなコードが可能になります。
p = {o | println(o)}
p "Hello, World"
これで標準出力に"Hello, World"が出力されます。1行目でクロージャをpに代入して、2行目で呼び出しています。2行目はちょっと省略しすぎましたが、正式には
p.call("Hello, World")
と書くところです。クロージャ呼び出しのシンタックスシュガーとしてp("Hello, World")という書き方が出来、さらにGroovyではRubyのようにあいまいさのないかっこは省略できるので、かっこを省略してしまったと言う訳です。
クロージャは簡単に例えるとJavaの匿名内部クラスのようなものだと思えばいいでしょう。重要な違いは、Groovyのクロージャは遅延バインディングを許しているということです。これは、クロージャを定義した時点で定義されていない変数をクロージャの中で使うことが出来る、ということです。
たとえば以下のようなコードです。
p = {println(o)}
o = "Hello, World"
p()
このように、クロージャは、実際に実行された時点のスコープで実行されます。
セミコロン、かっこを省略できるというのも以外と重要です。人間、楽なほうに転がり落ちるのは簡単なもので、いったんこの書き方になれてしまうとなかなか元にはもどれません。
さらに、Groovyはバイトコードにコンパイルすることができます。ここまでくるとほとんどJavaとは違う新手の言語という感じですね。
JavaVM上で一旦Javaのクラスに変換されて実行されている都合もあってか、さすがにRubyほど動的で洗練された言語仕様にはなっていないですし、機能的にもおそらくBeanShellの方が上なのですが、これらの簡便な記法はかなりの魅力で、たとえば今までXMLで書いていた設定ファイル等をGroovyに置き換えたりする用途には最適かとおもわれます。
このあたりの記述の簡単さ関してはGroovyのほうがよさそうです。GroovyはJavaに似た文法 + Rubyのような文法を特徴とするスクリプト言語で、僕のように仕事でJavaを使うRuby好きにはたまらない仕様となっております。
一番の特徴はなんといってもクロージャが使えることで、以下のようなコードが可能になります。
p = {o | println(o)}
p "Hello, World"
これで標準出力に"Hello, World"が出力されます。1行目でクロージャをpに代入して、2行目で呼び出しています。2行目はちょっと省略しすぎましたが、正式には
p.call("Hello, World")
と書くところです。クロージャ呼び出しのシンタックスシュガーとしてp("Hello, World")という書き方が出来、さらにGroovyではRubyのようにあいまいさのないかっこは省略できるので、かっこを省略してしまったと言う訳です。
クロージャは簡単に例えるとJavaの匿名内部クラスのようなものだと思えばいいでしょう。重要な違いは、Groovyのクロージャは遅延バインディングを許しているということです。これは、クロージャを定義した時点で定義されていない変数をクロージャの中で使うことが出来る、ということです。
たとえば以下のようなコードです。
p = {println(o)}
o = "Hello, World"
p()
このように、クロージャは、実際に実行された時点のスコープで実行されます。
セミコロン、かっこを省略できるというのも以外と重要です。人間、楽なほうに転がり落ちるのは簡単なもので、いったんこの書き方になれてしまうとなかなか元にはもどれません。
さらに、Groovyはバイトコードにコンパイルすることができます。ここまでくるとほとんどJavaとは違う新手の言語という感じですね。
JavaVM上で一旦Javaのクラスに変換されて実行されている都合もあってか、さすがにRubyほど動的で洗練された言語仕様にはなっていないですし、機能的にもおそらくBeanShellの方が上なのですが、これらの簡便な記法はかなりの魅力で、たとえば今までXMLで書いていた設定ファイル等をGroovyに置き換えたりする用途には最適かとおもわれます。