ゆーたんのつぶやき

株式会社ノークリサーチにてIT関連のシニアアナリストとして活動しています。

クロージャー



ここ最近で日本でもGroovyの話題を多く見かけるようになってきました。
Groovyにはスクリプト言語なのでコンパイルが不要、型を意識しなくて良い、
プリミティブ型の煩わしさがないといったメリットがありますが、ボクが便利
だと感じるのは「クロージャー」です。


元々Rubyに備わっていた仕様ですが、手軽に再利用可能な関数オブジェクトを
定義したい時には重宝します。Javaですと無名クラスを使ったりなどどうして
も大袈裟になってしまいますから、お手軽さがなんといっても魅力です。


さらにクロージャーをパラメータとして受け付けるメソッドも作成可能であり
標準で用意されている様々なメソッドもクロージャーを受け付けることができ
ます。特にコレクションを扱うeachやfindといったメソッドとクロージャ
の組み合わせは強力です。


def doProcess(closure){
 for(n in 1..10){
  closure(n)
 }
}
doProcess {|arg|println(arg*2)}
doProcess {|arg|println(arg+1)}


上のコードでは引数を1から10まで変化させながら、あるクロージャーの処理
を呼び出しています。実際の処理内容はクロージャーとして下2行でそれぞれ
二通りの方法で指定しています。こうやって処理内容をクロージャーとして
定義しておくことで処理内容の交換が簡単に行えるのも魅力ですね。