Groovyイン・アクション読書会IN関西#1に参加してきた

ネットと書籍だけですこし勉強してたGroovyの集まりに参加してきました。
「Groovy」という言葉に「なにそれ?」「あ〜あの終わってるやつ?」みたいな反応じゃなくて、
中身のお話ができる生身の人たちと会えたことに大興奮してしまいました。
(はしゃぎすぎて迷惑かけたかもしれないけど)

Groovy,Grailsのバージョンもちゃんとあがってるし、Springも興味もってるしまだまだ
これから面白くなる可能性あると思ってます。

次回も当然参加、いつかは東京や名古屋のイベントにも参加して、もっとたくさんの人に会いないな。

ミニ言語サンプル

Pragmatic Programerのミニ言語サンプルをgroovyでやってみた。


MiniLang.groovy

public class MiniLang{

	def P(val){	println "${val}のペンを選択する"}
	def D(){	println "ペンを紙の上に下ろす"}	
	def W(val){	println "西方向へ${val}cm動かす"}
	def N(val){	println "北方向へ${val}cm動かす"}
	def E(val){	println "東方向へ${val}cm動かす"}
	def S(val){	println "南方向へ${val}cm動かす"}
	def U(){
		println "ペンを紙から離す"
	}
	
	def exec(Closure cl){
		cl.delegate = this
		cl.call()
	}
	
	def exec(String str){
		// 簡易言語からgroovy scriptを生成
		String clStr = "cl = {${str}}"
		clStr = clStr.replaceAll("D", "D()") // プロパティ扱いにならないよう、置換
		clStr = clStr.replaceAll("U", "U()")
		// groovy scriptの実行
		def gs = GroovyShell.newInstance()
		def cl = gs.evaluate(clStr)
		exec(cl)
	}	
}


MiniLangRunner.groovy

def minilnag = MiniLang.newInstance()

scStr = """
P 2	//SyntaxSugerが働くので、このまま P(2)として動作
D	//プロパティDとして認識されるので、MiniLang.exec内でD()に置換
W 2
N 1
E 2
S 1
U
"""

minilnag.exec(scStr)

実行結果

2のペンを選択する
ペンを紙の上に下ろす
西方向へ2cm動かす
北方向へ1cm動かす
東方向へ2cm動かす
南方向へ1cm動かす
ペンを紙から離す

GroovyShellクラスを使って、単なる文字列から実行結果が取得できるので、クロージャを作ってそれを実行する方法をやってみたら、うまくいった。

mixinとMixinアノテーションをみて試してみた。

class HelloMixin {
    static void hello(t){
        println "hello $t"
    }
    static void magic(t,s){
        println "$t is $s"
    }
}
String.mixin(HelloMixin)
"World".hello()
"Groovy".magic('cool')
Integer.mixin(HelloMixin) // 整数にもmixinしてみる
123.hello()
123.magic('cool')
hello World
Groovy is cool
hello 123
123 is cool

mixinされたメソッドの最初の引数には、オブジェクト自身が渡されるみたい。
magic(t,s) って定義してるのに、使うときはmagic('cool')なんて、後で読む時に苦労しそう。

+で文字列の連結はよくあるけど、−で文字列の削除ができてしまう。おもしろいけど、今ひとつ使い道が思い当たらない。

str = "Groovy" + " Programing"
println str
println str - "Pro"

結果

Groovy Programing
Groovy graming

一日の仕事が終わって会社をでるとき
「あ〜疲れた」じゃなくて、「あ〜今日もがんばったな」と思うようにしたい。
疲れた気分で一日を終わると、明日のテンションが下がってしまう。
充実感ある心地よい疲れと感じれるよう、「がんばった」を使っていこう。