Groovy基礎勉強会に参加しました
Groovy基礎勉強会 - connpass
2013/03/09(#GroovyBase)Groovy基礎勉強会 - Togetterまとめ
感想
基礎大事でしょってことで、初めて基礎勉強会に参加してきました。
結論としては、なるほど、わからん!ってとこですかね。
Java をちゃんとやったことないまま Groovy 使ってる身としては難しい内容でしたが、今後の YokohamaGroovy でやるネタをたくさん拾うことができたと思います。
あと、Groovy 系の勉強会だからか、プレゼンする方ほぼ全員が IntelliJ IDEA 使っていたのが印象的でした。
ちょこっとだけ vim や Emacs もありましたけどね。
資料等は @orange_clover さんがまとめてくださってます。
Groovy基礎勉強会 に参加してきました。 #GroovyBase - みちしるべ
諸事情で懇親会の途中で退散しましたが、とても楽しく刺激的な時間を過ごせました。
会場提供のオラクルさん、主催のきょんさん、参加者の皆さんありがとうございました!
メモ
- 基礎を知っていると、問題発生したときに強いよ
- AST Browser 超便利!
- この機能知りませんでしたがすごい便利です
- vimdiff 便利なのでオススメです
- "アレ"はハイコンテキスト
- Grails も面白そう
その他
@Delegate アノテーションについて、@nobeans さんのつぶやきに付随してちょっとした疑問が。
missingなメソッド呼出をdelegateしてるわけですね #GroovyBase
じゃあ methodMissing() が定義されてたらどうなんのかなあと思ったのでやってみました。
class Hoge { def fuga() { return "fuga" } } class Piyo { @Delegate Hoge h = new Hoge() def methodMissing(String name, Object args){ "methodMissing" } } assert new Piyo().fuga() == "fuga" assert new Piyo().missing() == "methodMissing"
当然といえば当然で、コンパイルされた時点で Piyo クラスは、Hoge クラスの fuga() を呼び出す fuga() を実装しているので、fuga() の呼び出しは methodMissing になりません。
AST Browser での確認。
Canonicalization フェーズの出力結果です。
public class Piyo extends java.lang.Object { @groovy.lang.Delegate private Hoge h public java.lang.Object methodMissing(java.lang.String name, java.lang.Object args) { 'methodMissing' } public java.lang.Object fuga() { h.fuga() } public java.lang.Object this$dist$invoke$1(java.lang.String name, java.lang.Object args) { return this."$name"(* args ) } public void this$dist$set$1(java.lang.String name, java.lang.Object value) { this ."$name" = value } public java.lang.Object this$dist$get$1(java.lang.String name) { return this ."$name" } }
AST Browser 片手にもうちょっと AST 変換について理解を深めたいです。