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

Groovy基礎勉強会に参加しました

Groovy基礎勉強会 - connpass
2013/03/09(#GroovyBase)Groovy基礎勉強会 - Togetterまとめ

感想

基礎大事でしょってことで、初めて基礎勉強会に参加してきました。
結論としては、なるほど、わからん!ってとこですかね。
Java をちゃんとやったことないまま Groovy 使ってる身としては難しい内容でしたが、今後の YokohamaGroovy でやるネタをたくさん拾うことができたと思います。

あと、Groovy 系の勉強会だからか、プレゼンする方ほぼ全員が IntelliJ IDEA 使っていたのが印象的でした。
ちょこっとだけ vimEmacs もありましたけどね。

資料等は @orange_clover さんがまとめてくださってます。
Groovy基礎勉強会 に参加してきました。 #GroovyBase - みちしるべ

諸事情で懇親会の途中で退散しましたが、とても楽しく刺激的な時間を過ごせました。
会場提供のオラクルさん、主催のきょんさん、参加者の皆さんありがとうございました!

メモ

  • 基礎を知っていると、問題発生したときに強いよ
  • AST Browser 超便利!
    • この機能知りませんでしたがすごい便利です
  • vimdiff 便利なのでオススメです
  • "アレ"はハイコンテキスト
  • Grails も面白そう

その他

@Delegate アノテーションについて、@nobeans さんのつぶやきに付随してちょっとした疑問が。

じゃあ 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 変換について理解を深めたいです。