クロージャとは
Groovyのクロージャは「コードブロック」やメソッドポインタのようなものです。ひと固まりのコードとして定義され、後になって実行されます。
シンプルな例
上の例で、クロージャが定義されたときではなく、 呼ばれた ときに "hello!" が出力されていることに注意してください。
クロージャは、定義されたスコープ内で変数に「束縛」することもできます:
パラメータ
クロージャのパラメータは、以下のように -> トークンの前に並べられます:
クロージャ定義が一個以下のパラメータしかとらない場合、-> トークンは任意で省略可能です。
暗黙の変数
クロージャの内部では、特別な意味を持ついくつかの変数が定義されます:
It
単一の引数をとるクロージャでは、以下のようにパラメータ定義を省略することができます:
this, owner, delegate
this : Javaと同じように、this はそのクロージャ定義を含むクラスを指す
owner : そのクロージャを含むオブジェクト (this またはそのクロージャを囲んでいるクロージャ)
delegate : デフォルトでは owner と同じだが変更可能。例: builder や ExpandoMetaClass
例:
メソッド引数としてのクロージャ
メソッドの最後のパラメータがクロージャの場合、そのクロージャは以下のようにインラインで定義可能です:
上の例で collect メソッドは List と Closure を引数にとります。同じことを次のように書くこともできるでしょう(より冗長になりますが):
さらに詳しい情報
Groovyでは java.lang.Object を拡張して、クロージャを引数にとるメソッドを数多く追加しています。クロージャの実用的な利用法については GDK Extensions to Object を参考にしてください。
以下も参照してください: