P71 クロージャ

【基本】

Closure func1 = { println "Hello closure." }
assert func1 instanceof groovy.lang.Closure //True

func1.call() // Hello closure.
func1() //Hello closure.

【引数有と引数無】

//引数有
Closure func2 = { target -> println "Hello $target."}
clos2.call("hoge") //Hello hoge.

//引数無、クロージャは引数を定義しなかった場合、暗黙の引数itが定義されているとみなされる
Closure func3 = {println "Hello $it."}
func3.call('world') //Hello world. 
func3.call() // Hello null.(itのデフォルト値はnullのため)

//完全引数無としたい場合
Closure func4 = { -> println "Hello world."}
func4.call() //Hello world.
func4.call("world") //MissingMethodException:No signature of methodとなる

//引数を複数かつ型定義
Closure func5 = { String s, int i -> println "s=$s, i=$i" }
func5.call('Hello', 5) //s=Hello, i=5

クロージャリテラル表現】

def ab(Boolean expr, Closure func) {
  if (expr) {
    func.call(expr)
  }
}

Closure func = {println "expr=$it"}
ab(true, func) //expr=true

//Closure funcを定義しない場合
ab(true, {println "expr=$it"})//expr=true

//メソッドの最後の引数がクロージャの場合の略記方法
ab(true) {println "expr=$it"}//expr=true

プログラミングGROOVY

プログラミングGROOVY