クラスとメソッドの定義
クラスの定義は、Javaと同様、「class クラス名」の後に続く{}内に記述をします。クラス内にはメソッドとフィールドをおくことができます。これらは「def 名前」といった形で定義をします。例えば、簡単なクラスを作成してみましょう。
class Helo { def msg Helo(s){ msg = s } def sayHelo(){ println msg } }
ここでは、msgというフィールドと、Helo
コンストラクタ、そしてsayHelo
メソッドがクラスに用意されています(クラス名と同名のメソッドはコンストラクタとして扱われます)。このようにして定義されたHelo
クラスを利用してメッセージを表示するには、例えば次のようにすればよいでしょう。
new Helo("こんにちは").sayHelo()
ルーズステートメント
Javaでは、すべての文は常にクラス内のメソッドの中に記述しなければいけませんでしたが、Groovyはそうではありません。Groovyの文は、「どこにも所属しない」「(クラスに含まれていない)メソッド内」「クラスの中にあるメソッド内」のいずれにも書くことができます。
getMsg("こんにちは") def getMsg(msg = "Message"){ println msg }
例えばこれはgetMsgというメソッドを定義し、それを呼び出して実行しています。クラスは使っていませんが、ちゃんとスクリプトは動きます。ここでのgetMsg("こんにちは")
のように、メソッドやクラスに含まれない文を「ルーズステートメント」と言います。
リストとマップ
Groovyでは、配列や連想配列に相当するものが「リスト」と「マップ」として用意されています。これは、[]記号を使って作成します。配列は各値をカンマで区切って記述します。連想配列は、キーと値をコロンでつなげて記述します。例えば、次のような具合です。
arr = [1,2,3] arr = ['one':1, 'two':2, 'three':3]
このリストとマップは、Javaの配列などと比べると非常に柔軟な扱いが可能です。例えば、割り算を除く四則演算を使うことができます。
arr = [1,2,3] arr += [4,5] arr -= [2,4] arr *= 2 println arr
例えば、このようにすると、[1,3,5,1,3,5]という配列が得られます。[1,2,3]に[4,5]をたして[1,2,3,4,5]になり、そこから[2,4]を引いて[1,3,5]になって、これが2倍され[1,3,5,1,3,5]となったわけです。
また、連想配列の場合、値を取り出すのに[]ではなく、ドットでキー名を続けて記述することもできます。例えば、以下の2つのprintlnでは、いずれも同じ値を出力します。
arr = ['one':1, 'two':2, 'three':3] println arr['one'] println arr.one
配列と連想配列は、Groovyの内部では、実はJavaのArrayListとLinkedMapが使われています。これらに各種機能を追加して利用しているのです。