• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
groovy 2.1.0 20130118
 

groovy 2.1.0 20130118

on

  • 4,024 views

Groovy 2.1.0 is great!

Groovy 2.1.0 is great!

Statistics

Views

Total Views
4,024
Views on SlideShare
2,662
Embed Views
1,362

Actions

Likes
5
Downloads
12
Comments
0

6 Embeds 1,362

http://uehaj.hatenablog.com 919
http://d.hatena.ne.jp 340
https://twitter.com 75
http://orangeclover.hatenablog.com 26
http://favtile.com 1
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    groovy 2.1.0 20130118 groovy 2.1.0 20130118 Presentation Transcript

    • Groovy 2.1.0が凄い 2013/1/18 JGGUG G*Workshop NTTソフトウェア Grails推進室 上原潤二 http://www.flickr.com/photos/mrhermit/3214708288/13年1月18日金曜日
    • 自己紹介 上原潤二(@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日金曜日
    • 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日金曜日
    • 記事かいた 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日金曜日
    • 何が凄いのか? 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 Corporation All rights reserved.13年1月18日金曜日
    • Groovy 2.1.0の静的Groovyに関連する機能拡張 @DelegatesToアノテーション カスタム型チェク拡張査 カスタムベーススクリプトクラ スの指定 コンパイラ設定スクリプト コンパイラ設定ビルダー Slide # 7 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
    • @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日金曜日
    • つまりこういうこと(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日金曜日
    • つまりこういうこと(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日金曜日
    • つまりこういうこと(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日金曜日
    • 何ができるのか? Slide # 12 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
    • 何ができるのか? delegateを用いて実装されたビ ルダーやDSLの静的型チェック が簡単にできる。 「カスタム型チェック拡張」よりも簡単だが 制約は比較的大きい。 IDEが対応すれば補完も ドキュメントとしても役立つ Slide # 13 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日
    • やってみた(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日金曜日
    • やってみた(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日金曜日
    • カスタム型チェック拡張でたぶんできそうなこと 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日金曜日
    • まとめ Groovy 2.1.0の 静的Groovyに関 連する機能拡張が 凄い。(詳しくはG*Magで) Slide # 17 JGGUG G*Workshop Copyright(C) 2012 NTT Software Corporation All rights reserved.13年1月18日金曜日