Golf.with{ Groovy(0) }

ゴルフ向け機能のまとめ。

  • GString

「 "${式}" 」が基本だが,単なるメンバアクセスの場合は {} が要らない。

// echo.groovy (17)
print"$System.in"

しかもなにやら怪しげな挙動。なぜこれで成立するのか謎。

  • spread
// transposeLines.groovy (67)
System.in.readLines()*.toList().transpose().each{println it.join()}

地味に活躍。

  • Range
// primeNumbers.groovy (86)
p=(2..541).findAll{i->!(2..<i).any{i%it<1}}
"$System.in".toLong().times{println p[it]}

「 ..< 」だと終端を含まない。Rubyの「 ... 」より分かりやすい。

  • cast

かなり自在に変換できる。
というか,型の融通が利かないことが多い*1ので変換せざるを得ない。

(int[])'abc' // => [97, 98, 99]
'abc'as List // => ["a", "b", "c"]

「 (List)'abc' 」はエラー。優先順位も違うので随時使い分ける。

  • accessor
new Date().with{ it.time *= 2; it } // => Wed Apr 25 20:30:18 JST 2046

Rhinoと同じ。「 hoge.getFuga() 」は「 hoge.fuga 」,「 hoge.setPiyo(x) 」は「 hoge.piyo = x 」と書ける。

  • it
I = { it }

Xtalと同じ。クロージャの記述はPerl6並みに簡潔。

*2

*1:配列の添え字にintしか受け付けなかったりとか

*2:08-02-29 追記とコード例の差し替え