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がこんな書き方だった。