読者です 読者をやめる 読者になる 読者になる

Yokohama.groovy #9 に参加しました

2012/11/27 Yokohama.groovy #9 #yokohamagroovy - Togetterまとめ

最近このネタしか書いてませんが、今回も Yokohama.groovyです。
9回目をやってきました。

会場はいつものタネマキさん。
いつもよりもお客さん多めでにぎやかでした。
こちらは参加者 3 人 + ゲスト 1 人でいつも通りな感じ。

今回の範囲

プログラミングGROOVY

プログラミングGROOVY

5.2 メタプログラミングです。

Category と Expando

Category も Expando も、元のクラスに全く手をつけずに簡単に拡張したり書き換えたりできるのがすばらしいです。
テスト時に Mock 的に使ったり、既存ライブラリの拡張したり、色々できそうです。
Expando は以前やった、map を使った Mock と似てますね。

遊びで Integer クラスを拡張して、fizzbuzz メソッドを実装してみました。*1
実装が愚直なのは置いといて、こういうのができちゃうのは楽しいですね。

@Category(Integer)
class IntegerCategory {
	Integer fizzbuzz() {
		if (this % 15 == 0) {
			println "FizzBuzz"
		} else if (this % 5 == 0) {
			println "Buzz"
		} else if (this % 3 == 0) {
			println "Fizz"
		} else {
			println this
		}
	}
}
 
use(IntegerCategory) {
	(1..100).each {
		it.fizzbuzz()
	}
}

invokeMethod と methodMissing

markupBuilder のソースコードを呼んだときにも出てきたアレです。
本の記述だけでは動作の違いがよく分からなかったので、togetter のうさみみさんの解説がありがたいです。
時間を見つけてソースコード読みます。
Groovy インアクションの MOP の説明も読んでみます。

その他

とあるきっかけで、何で Groovy やってんのかなーってことを考えましたが、一番はやってて楽しいからかなーと再確認。
そんな感じで、今回も楽しかったです。

*1:前に誰かが言ってたのを思い出したので