GroovyをEclipseから使う
では、サンプルとしてJavaプロジェクトを用意して、Groovyのスクリプトを動かしてみましょう。Groovyのファイルは、通常のJavaクラスを作成するものならどんなところでも使えます。ここでは一般的なJavaプロジェクトを用意し、そこにGroovyファイルを作成してみます。
プロジェクトを用意したら、<ファイル><新規><その他>メニューを選び、ウィザード選択ウインドウを呼び出します。そこで「Groovy」項目内にある「Groovy Class」を選びます。
新規作成のウインドウで「Groovy Class」を選ぶ。 |
続いてのGroovy Classの設定では、パッケージと名前、そしてスーパークラスをそれぞれ設定します。ここでは以下のようにしておきましょう。
パッケージ:jp.tuyano.allabout
名前:SampleJFrame
スーパークラス:javax.swing.JFrame
パッケージと名前、スーパークラスをそれぞれ指定する。 |
終了する際に、Groovyのランタイムサポートを追加するか?という確認のダイアログが現れるので、OKしてください。これで自動的にGroovyを利用するためのライブラリ類が追加されます。
では、簡単なサンプルを作成してみましょう。ここでは、JFrameを継承して簡単なSwingアプリケーションを用意してみます。一般的なJavaによるソースコードとの違いをよく見てください。
package jp.tuyano.allabout;
import java.awt.*
import java.awt.event.*
import javax.swing.*
class SampleJFrame extends JFrame implements ActionListener {
def text1,field1,button1
static void main(args) {
new SampleJFrame().visible = true
}
SampleJFrame(){
text1 = new JLabel("please type your name.")
add(text1,BorderLayout.NORTH)
field1 = new JTextField()
add(field1,BorderLayout.CENTER)
button1 = new JButton("OK")
button1.addActionListener(this)
add(button1,BorderLayout.SOUTH)
defaultCloseOperation = JFrame.EXIT_ON_CLOSE
size = [200,150]
}
void actionPerformed(ActionEvent ev){
def n = Integer.parseInt(field1.text)
def total =0
for(i in 1..n){
total += i
}
text1.text = "total: " + total
}
}
作成したスクリプトは、ざっと見ればわかるように、Javaのソースコードのあちこちが簡略化されていることに気づいたはずです。いくつかポイントを整理していきましょう。
・Javaの標準ライブラリクラスがそのまま使える。このソースコードを見ると、「GroovyはJavaの一種(?)だ」ということがよくわかります。やっていることは、あくまでJavaを操作することなのです。
・public classで宣言していない。実は、これは単純な話で、Groovyではアクセス修飾子を省略すると標準でpublicとして扱われます。つまり、ただ「class ○○」と書くだけで、自動的にpublic classになるのです。
・プロパティの値を直接やりとりしている。これはかなり不思議でしょう。例えば、text1にsetTextするのに「text1.text = ○○」と書いて動いてしまいます。Javaでは、Setter/Getterメソッドを呼び出してプロパティにアクセスするのが基本でしたが、Groovyでは、あたかもそのプロパティのpublicフィールドがあるかのようにアクセスすることができます。
圧巻なのは、JFrameの大きさをsetSizeで設定している部分です。「size = [200,150]」で済んでしまうなんて! [200,150]は、2つの要素を持つ配列です。こんな具合にして複数の値を渡すだけでプロパティが設定されるなんて、実に不思議ですね。
・繰り返しの書き方が変。よく見ると、「for(i in 1..n)」なんて書き方をしていますね。このあたりの文法は、JavaとGroovyとの違いがもっとも明確に現れるところです。Groovyには、配列やコレクションを効率よく処理するための構文がいろいろと用意されているのです。