はじめに
Groovyはクロージャ(Closure)が使える。
クロージャが使えると、RubyとかjQueryでよくやるあの感じ(笑)のコーディングが出来る!
つかってみる
スコープ
クロージャはブロックの外側の変数にアクセスすることができる。
closure1.groovy
package co.jp.e2info.groovy
a = "xxx"
c = {
a = it
b = it
println a
}
c("o_o")
println a
println b
/*
o_o
o_o
o_o
*/
レキシカルスコープ
クロージャが呼び出された場所ではなく、クロージャが宣言されている場所からみたスコープが有効
closure2.groovy
package co.jp.e2info.groovy
a = "xxx"
def c = {
def a = "x_x"
return { println a }
}()
a = "xxx"
println a
c()
/*
xxx
x_x
*/
変数の束縛
クロージャ内で宣言した変数のスコープはクロージャ内のみとなる
closure3.groovy
package jp.co.e2info.groovy
a = "xxx"
def c = {
def a = "x_x"
return { println a }
}()
a = "xxx"
println a
c()
/*
xxx
x_x
*/
本領発揮
必殺!この記法で書くことができると、イテレーションの条件と実際の処理を分離することができる。
closure4.groovy
package co.jp.e2info.groovy
[1, 2, 3, 4].each({x -> println x})
/*
1
2
3
4
*/
総括
便利な機能はどんどん使いましょう