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