Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Groovy              2.1.0が凄い       2013/1/18 JGGUG G*Workshop            NTTソフトウェア Grails推進室                           上原潤...
自己紹介       上原潤二(@uehaj)         NTTソフトウェア株式会社Grails推進室         JGGUG(日本Grails/Groovyユーザグループ)         運営委員         書籍執筆: プロ...
Groovy 2.1.0の新機能      invoke dynamic(Indy)フルサポート      GPars 1.0へのアップグレード      @DelegateToアノテーション      拡張可能な型検査      メタアノテー...
記事かいた      G*Magazine Vol.6      Groovy臨機応変(第一回)      動中の静…Groovy 2.1.0の新      機能その1        Slide # 4   JGGUG G*Workshop  ...
何が凄いのか?        Slide # 5   JGGUG G*Workshop   Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
静的Groovyに     関連する機能拡     張が凄い。(個人の感     想です)        Slide # 6   JGGUG G*Workshop   Copyright(C) 2012 NTT Software Corpora...
Groovy 2.1.0の静的Groovyに関連する機能拡張              @DelegatesToアノテーション              カスタム型チェク拡張査              カスタムベーススクリプトクラ      ...
@DelegatesToアノテーション      メソッド宣言におけるメソッド引数(クロージ      ャ)に指定      def foo(@DelegatesTo(<Class>) Closure c) {        …      } ...
つまりこういうこと(1)   def foo(Closure c) {     …   }   foo {    toUpperCase() // String#toUpperCase()が呼び出   される   }        Slide ...
つまりこういうこと(2)   def foo(@DelegatesTo(String) Closure c) {     …   }   @TypeChecked // 静的型チェックのもとで   foo {       // このクロージャ内...
つまりこういうこと(3)   def foo(@DelegatesTo(String) Closure c) {     …   }   @TypeChecked   foo {       // delegateはStringインスタンスを保...
何ができるのか?        Slide # 12 JGGUG G*Workshop   Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
何ができるのか?      delegateを用いて実装されたビ      ルダーやDSLの静的型チェック      が簡単にできる。         「カスタム型チェック拡張」よりも簡単だが         制約は比較的大きい。      I...
やってみた(1)      静的型チェック可能なMarkupBuilderモドキ          @TypeCheckeddef	  test()	  {          	  	  new	  HtmlBuilder().html	  {...
やってみた(2)     import	  groovy.transform.*     class	  HtmlBuilder	  {     	  	  def	  html(@DelegatesTo(Html)	  Closure	  c...
カスタム型チェック拡張でたぶんできそうなこと     Grailsのdynamic finderを、DBスキーマをコンパイ     ル時に参照することで静的型チェック     コンパイル時にメソッドが存在しない場合、Groovy     のモジュ...
まとめ     Groovy 2.1.0の     静的Groovyに関     連する機能拡張が     凄い。(詳しくはG*Magで)        Slide # 17 JGGUG G*Workshop   Copyright(C) 20...
Upcoming SlideShare
Loading in …5
×

groovy 2.1.0 20130118

5,207 views

Published on

Groovy 2.1.0 is great!

Published in: Technology

groovy 2.1.0 20130118

  1. 1. Groovy 2.1.0が凄い 2013/1/18 JGGUG G*Workshop NTTソフトウェア Grails推進室 上原潤二 http://www.flickr.com/photos/mrhermit/3214708288/13年1月18日金曜日
  2. 2. 自己紹介 上原潤二(@uehaj) NTTソフトウェア株式会社Grails推進室 JGGUG(日本Grails/Groovyユーザグループ) 運営委員 書籍執筆: プログラミングGROOVY(技術評 論社), Grails徹底入門(翔泳社) ブログ「Grな日々」 GroovyServ, LispBuilder, GVM, staticalizer開発者 Slide # JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  3. 3. Groovy 2.1.0の新機能 invoke dynamic(Indy)フルサポート GPars 1.0へのアップグレード @DelegateToアノテーション 拡張可能な型検査 メタアノテーションシステム カスタムベーススクリプトクラスの指定 コンパイラ設定スクリプト コンパイラ設定ビルダー コマンドラインからGroovyスクリプトを指定するため のURLプリフィックスjar://, file://サポート Slide # 3 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  4. 4. 記事かいた G*Magazine Vol.6 Groovy臨機応変(第一回) 動中の静…Groovy 2.1.0の新 機能その1 Slide # 4 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  5. 5. 何が凄いのか? Slide # 5 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  6. 6. 静的Groovyに 関連する機能拡 張が凄い。(個人の感 想です) Slide # 6 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  7. 7. Groovy 2.1.0の静的Groovyに関連する機能拡張 @DelegatesToアノテーション カスタム型チェク拡張査 カスタムベーススクリプトクラ スの指定 コンパイラ設定スクリプト コンパイラ設定ビルダー Slide # 7 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  8. 8. @DelegatesToアノテーション メソッド宣言におけるメソッド引数(クロージ ャ)に指定 def foo(@DelegatesTo(<Class>) Closure c) { … } このメソッドの引数に渡したクロージャが呼 び出されるときにはdelegateプロパティに @DelegatesToに指定した型<Class>のイン スタンスが代入されているということを、呼び 出し側が判るように宣言する。 Slide # 8 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  9. 9. つまりこういうこと(1) def foo(Closure c) { … } foo { toUpperCase() // String#toUpperCase()が呼び出 される } Slide # 9 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  10. 10. つまりこういうこと(2) def foo(@DelegatesTo(String) Closure c) { … } @TypeChecked // 静的型チェックのもとで foo { // このクロージャ内では、delegateプロパティは // Stringインスタンスを保持していると仮定できる toUpperCase() 静的型チェックもしくは静的 コンパイルできる。 } (DelegatesToが無ければ静 的型チェックエラー) Slide # 10 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  11. 11. つまりこういうこと(3) def foo(@DelegatesTo(String) Closure c) { … } @TypeChecked foo { // delegateはStringインスタンスを保持 // していると仮定できる toooUpperCase() } コンパイル時エラーになる Slide # 11 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  12. 12. 何ができるのか? Slide # 12 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  13. 13. 何ができるのか? delegateを用いて実装されたビ ルダーやDSLの静的型チェック が簡単にできる。 「カスタム型チェック拡張」よりも簡単だが 制約は比較的大きい。 IDEが対応すれば補完も ドキュメントとしても役立つ Slide # 13 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  14. 14. やってみた(1) 静的型チェック可能なMarkupBuilderモドキ @TypeCheckeddef  test()  {    new  HtmlBuilder().html  {        head  {            title  "Groovy  2.0.1は凄い!"        }        body  {            p  "Groovy  2.0.1は凄い!"            ul  {                li  "リスト1"                ul  "リスト2"            }            h1  "凄いわ!" コンパイル時エラーになる        } →flymake-groovyでデモ    } } https://gist.github.com/4563201 Slide # 14 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  15. 15. やってみた(2) import  groovy.transform.* class  HtmlBuilder  {    def  html(@DelegatesTo(Html)  Closure  c)  {        c.delegate  =  new  Html()        println  "<html>";  c();  println  "</html>"    } } class  Html  {    def  head(@DelegatesTo(Head)  Closure  c)  {        c.delegate  =  new  Head()        println  "  <head>";  c();  println  "  </head>"    }    def  body(@DelegatesTo(Body)  Closure  c)  {        c.delegate  =  new  Body()        println  "  <body>";  c();  println  "  </body>"    } } class  Head  {    def  title(String  s)  {  println  "    <title>$s</title>"  } } class  Body  {    def  h1(String  s)  {  println  "    <h1>$s</h1>"  }    def  p(String  s)  {  println  "    <p>$s</p>"  }    def  ul(@DelegatesTo(Ul)  Closure  c)  {        c.delegate  =  new  Ul()        println  "    <ul>";  c();  println  "    </ul>"    } } class  Ul  {    def  li(String  s){  println  "      <li>$s</li>"  } } Slide # 15 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  16. 16. カスタム型チェック拡張でたぶんできそうなこと Grailsのdynamic finderを、DBスキーマをコンパイ ル時に参照することで静的型チェック コンパイル時にメソッドが存在しない場合、Groovy のモジュールをGrapeでダウンロードしてメソッド を追加する メソッドが存在しない場合、invokeMethod呼び出 しにする(Groovy++のmixedモードコンパイル相当) sprintf()のフォーマットと引数型のチェック 任意のチェッカ(コーディング規約チェックとか) AST変換が道を開いたGroovyコンパイラのオープン 化の一環 Slide # 16 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
  17. 17. まとめ Groovy 2.1.0の 静的Groovyに関 連する機能拡張が 凄い。(詳しくはG*Magで) Slide # 17 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日

×