Groovy におけるクロージャは、{
と }
で囲まれた無名のコードブロックであり、通常のメソッドと同様にパラメータを受け取ったり、戻り値を返したりすることができます。
また、クロージャは変数への代入や、メソッドのパラメータとして渡すことが可能です。
下記は、渡されたパラメータを二乗するだけのクロージャの定義例です。
ここでは、定義したクロージャを square
という名前の変数に代入し、後からメソッド呼び出しのように実行しています。
Closure square = {
it * it
}
println square(3)
上記のように、クロージャに渡されるパラメータがひとつだけの場合は、デフォルトで it
という名前で参照することができます(パラメータが渡されずに呼び出された場合、it
の値は null
になります)。
複数のパラメータを渡したい場合などは、下記のように定義します。
Closure add = { a, b ->
a + b
}
println add(1, 2)
クロージャは、コレクションに格納された要素に対する処理を記述する際などに使用されます。
次の例では、リストオブジェクトの each
メソッドに対してクロージャを渡しています。
list = [1, 2, 3]
list.each() {
println it * 2
}
Groovy ベースのビルドツールである Gradle では、コンフィギュレーションブロックの記述でクロージャが活用されています。 下記は、Gradle ビルドスクリプトの抜粋です。
dependencies {
compile project(':mylib')
}
まるで設定ファイルの独自構文のような記述ですが、Groovy の処理系から見れば、実は dependencies
というメソッドにクロージャを渡しているだけです。