SlideShare a Scribd company logo
1 of 17
Download to read offline
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日金曜日

More Related Content

What's hot

Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Uehara Junji
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1Uehara Junji
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyYasuharu Nakano
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode ContractsYoshifumi Kawai
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Uehara Junji
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222Nobuhiro Sue
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんYukari Sakurai
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
Qt5 の Input Method
Qt5 の Input MethodQt5 の Input Method
Qt5 の Input MethodTakumi Asaki
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovyirof N
 
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 NagoyaQtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 NagoyaKazuo Asano (@kazuo_asa)
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...Yoshifumi Kawai
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Yuto Takei
 
【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き虎の穴 開発室
 

What's hot (20)

Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Groovyの紹介20130323
Groovyの紹介20130323Groovyの紹介20130323
Groovyの紹介20130323
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode Contracts
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
Qt5 の Input Method
Qt5 の Input MethodQt5 の Input Method
Qt5 の Input Method
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovy
 
ZynqMPのQEMU
ZynqMPのQEMUZynqMPのQEMU
ZynqMPのQEMU
 
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 NagoyaQtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き
 

Similar to groovy 2.1.0 20130118

明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Clooaokomoriuta
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Uehara Junji
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみたMori Shingo
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうKazuhiro Hara
 
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組みJJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み日本Javaユーザーグループ
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門Tomoya Kawanishi
 
配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用yut148atgmaildotcom
 
Power Assert and perl.js
Power Assert and perl.jsPower Assert and perl.js
Power Assert and perl.jsGoro Fuji
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 
20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf
20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf
20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdfAyachika Kitazaki
 
Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!leverages_event
 
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Yuji Kubota
 
Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発Y OCHI
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGParsfumokmm
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggugkimukou_26 Kimukou
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)openrtm
 
8F Emacs seminar 1st
8F Emacs seminar 1st8F Emacs seminar 1st
8F Emacs seminar 1sttoshi_pp
 

Similar to groovy 2.1.0 20130118 (20)

明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろう
 
Hudson using Groovy #jggug
Hudson using Groovy  #jggugHudson using Groovy  #jggug
Hudson using Groovy #jggug
 
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組みJJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用
 
Power Assert and perl.js
Power Assert and perl.jsPower Assert and perl.js
Power Assert and perl.js
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf
20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf
20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf
 
Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!
 
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Head toward Java 15 and Java 16
Head toward Java 15 and Java 16
 
Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGPars
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
 
Gopenflow demo v1
Gopenflow demo v1Gopenflow demo v1
Gopenflow demo v1
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)
 
8F Emacs seminar 1st
8F Emacs seminar 1st8F Emacs seminar 1st
8F Emacs seminar 1st
 

More from Uehara Junji

Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Uehara Junji
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsUehara Junji
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能についてUehara Junji
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Uehara Junji
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Uehara Junji
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEUehara Junji
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Uehara Junji
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming LanguageUehara Junji
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyUehara Junji
 
G*WS 3rd Lightning talk
G*WS 3rd Lightning talkG*WS 3rd Lightning talk
G*WS 3rd Lightning talkUehara Junji
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And FutureUehara Junji
 
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Uehara Junji
 
Groovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftGroovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftUehara Junji
 

More from Uehara Junji (15)

Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能について
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
 
Clojure
ClojureClojure
Clojure
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming Language
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
 
Lisp Builder
Lisp BuilderLisp Builder
Lisp Builder
 
G*WS 3rd Lightning talk
G*WS 3rd Lightning talkG*WS 3rd Lightning talk
G*WS 3rd Lightning talk
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And Future
 
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)
 
Groovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftGroovy Conference2008 Nttsoft
Groovy Conference2008 Nttsoft
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

groovy 2.1.0 20130118

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