groovyの基礎文法

さっそく自分のプロジェクトでantのbuildファイルにgroovy使ってみた。めちゃ便利!やっぱまじめに勉強しよ〜。
定番のhello,worldとコレクション系を整理。

コンソール出力

print 'hello, world'
println 'hello, world'


name = 'taro'
println "私の名前は${name}です。"

文字列、リスト、マップの宣言

str = '' // 空文字
str = 'hogehoge'
list = [] // 空リスト
list = [1,2,3]
map = [:] // 空マップ
map = [1:'dog', 2:'cat']

リストやマップへの値の追加

list.add(4)
list << 5


map.put(3,'cow')
map[4] = 'fox'

繰り返し処理

普通の拡張forループ
for(key in list) println key


クロージャを利用したループ
list.each{println it}
list.each{x -> println x}


こんなものも。
100.times {println it}
(1..100).each{println it}


mapをぐるぐる回してキーと値を取得するにはこんな感じ
map.each{record -> println "キーは${record.key}で、値は${record.value}"}

まとめ

クロージャってのがJavaな僕には聞きなれない言葉でした。{}で囲まれた部分がクロージャなんですが、これだけを変数に代入することも出来ます(以下の例参照)。ま、それだけでは役に立ちませんが。クロージャを受けつけるメソッドと組み合わせて意味があるので、イメージでいうとメソッド側が凹でクロージャが凸。

cl = { x -> println x }
[1,2,3].each(cl)

ちょっとはまったのは、クロージャ内部で変数を利用する書き方。ネット上のサンプルはほとんどがこんな風でした。
[1,2,3].each{x|println x}
これを実行すると次のようなエラーが出ます。

Discarding invalid text:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed,
groovysh script: 4: unexpected token: x @ line 4, column 24.
   [1,2,3].each{x|println x}

最新版ではどうも違うみたいです。昔の方がしっくりくるな。確かrubyがこんな書き方だった。