Groovy!るーたん / @luxion
自己紹介•   HN    •   無線LANるーたん        •   社内で『るーたん派』が増えている…•   お仕事    •   フロント系サーバ(Apache)担当    •   言語        •   C++03, Pyth...
Groovy
今回はGroovy
なんでGroovy…
Groovyって何ぞ• JVM上で動く動的言語• Rubyの影響を強く受け、またObjective-C の影響を受けている• Javaとの互換性が極めて高く、Javaのライ ブラリが利用できる• 小さなスクリプトから大きなプロダクトまで カバー...
Groovyの特徴的な機能• プロパティの自動生成• クロージャ• GString• コレクション用GDKメソッド• Builder
プロパティの自動生成class Hoge {   def number}Hoge hoge = new Hoge(number:10)assert hoge.number == 10hoge.number = 3assert hoge.numb...
プロパティの自動生成class Hoge {   final def number = 10}Hoge hoge = new Hoge()assert hoge.number == 10hoge.number = 3 // Err!assert ...
プロパティの自動生成class Hoge {   private def number = 10}Hoge hoge = new Hoge()assert hoge.number == 10 //Err!hoge.number = 3 // E...
プロパティの自動生成class Hoge {   private def number = 10}   1.8.x だとバグってるHoge hoge = new Hoge()assert hoge.number == 10 //Err!hoge...
クロージャClosure c1 = { println it*3 }c1(4)Closure c2 = { x -> println x*2 }c2(2)(1..100).each { println it }
クロージャnewFileInputStream("file.txt").eachLine{ line ->println line }
GString• ダブルクォートで括られた文字列の  $変数名 、 ${式} のプレースホルダを GStringと呼ぶ• $変数名では変数が展開され、${式}では 式の結果が展開される
GStringdef str = "aiueo"assert "1. $str" == "1. aiueo"assert "2. ${str*3}" == "2.aiueoaiueoaiueo"
コレクション用GDKメソッドList list = ["a","b","c"]assert list.first() == "a"assert list.tail() == ["b", "c"]list = [["l", "u", "x"], [...
コレクション用GDKメソッドlist = ["l", "u"]list << "x"assert list == ["l", "u", "x"]list = ["l", "u", ["x", "i"]]assert list.flatten() ...
Builder• HTMLやXMLといったマークアップ言語 のデータ構造を作成する MarkupBuilder• Swingの構造を作成するSwingBuilder
Swing Builderimport groovy.swing.SwingBuilderimport java.awt.BorderLayout as BLclass Test {   static void main(args) {    ...
語れなかったその他• switch-case文のcase条件にクラスやク ロージャが使えるように強化された• @Singleton、@Immutable、 @Category、@Mixinといったアノテー ションを適用すると対応した機能が自動 ...
語れなかったその他•   Grails    •   Groovy版Ruby on Rails•   Gradle    •   Mavenのようなビルドツール。XMLでなく        Groovyで記述•   GParts    •   ...
まとめ
Javaをやめて Groovyだ!
ご清聴ありがとうございました
Aizu lt tokyo_luxion
Upcoming SlideShare
Loading in...5
×

Aizu lt tokyo_luxion

456

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
456
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Aizu lt tokyo_luxion

    1. 1. Groovy!るーたん / @luxion
    2. 2. 自己紹介• HN • 無線LANるーたん • 社内で『るーたん派』が増えている…• お仕事 • フロント系サーバ(Apache)担当 • 言語 • C++03, Python2.7, Perl, PHP5.3(Ext), XSLT, etc
    3. 3. Groovy
    4. 4. 今回はGroovy
    5. 5. なんでGroovy…
    6. 6. Groovyって何ぞ• JVM上で動く動的言語• Rubyの影響を強く受け、またObjective-C の影響を受けている• Javaとの互換性が極めて高く、Javaのライ ブラリが利用できる• 小さなスクリプトから大きなプロダクトまで カバーできる汎用性を持つ
    7. 7. Groovyの特徴的な機能• プロパティの自動生成• クロージャ• GString• コレクション用GDKメソッド• Builder
    8. 8. プロパティの自動生成class Hoge { def number}Hoge hoge = new Hoge(number:10)assert hoge.number == 10hoge.number = 3assert hoge.number == 3
    9. 9. プロパティの自動生成class Hoge { final def number = 10}Hoge hoge = new Hoge()assert hoge.number == 10hoge.number = 3 // Err!assert hoge.number == 3 // Err!
    10. 10. プロパティの自動生成class Hoge { private def number = 10}Hoge hoge = new Hoge()assert hoge.number == 10 //Err!hoge.number = 3 // Err!assert hoge.number == 3 // Err!
    11. 11. プロパティの自動生成class Hoge { private def number = 10} 1.8.x だとバグってるHoge hoge = new Hoge()assert hoge.number == 10 //Err!hoge.number = 3 // Err!assert hoge.number == 3 // Err!
    12. 12. クロージャClosure c1 = { println it*3 }c1(4)Closure c2 = { x -> println x*2 }c2(2)(1..100).each { println it }
    13. 13. クロージャnewFileInputStream("file.txt").eachLine{ line ->println line }
    14. 14. GString• ダブルクォートで括られた文字列の $変数名 、 ${式} のプレースホルダを GStringと呼ぶ• $変数名では変数が展開され、${式}では 式の結果が展開される
    15. 15. GStringdef str = "aiueo"assert "1. $str" == "1. aiueo"assert "2. ${str*3}" == "2.aiueoaiueoaiueo"
    16. 16. コレクション用GDKメソッドList list = ["a","b","c"]assert list.first() == "a"assert list.tail() == ["b", "c"]list = [["l", "u", "x"], ["i", "o", "n"]]assert list.transpose() == [["l", "i"], ["u", "o"], ["x","n"]]list = [[1, 2], ["l", "u"]]assert list.combinations() == [[1, "l"], [2, "l"], [1,"u"], [2, "u"]]
    17. 17. コレクション用GDKメソッドlist = ["l", "u"]list << "x"assert list == ["l", "u", "x"]list = ["l", "u", ["x", "i"]]assert list.flatten() == ["l", "u", "x", "i"]list = [1, 2, 3, 4, 5]assert list.findAll{it > 3} == [4, 5]
    18. 18. Builder• HTMLやXMLといったマークアップ言語 のデータ構造を作成する MarkupBuilder• Swingの構造を作成するSwingBuilder
    19. 19. Swing Builderimport groovy.swing.SwingBuilderimport java.awt.BorderLayout as BLclass Test { static void main(args) { def swing = new SwingBuilder(); def data = [[A:a, B:b]] def myTable = swing.table() { tableModel(list:data) { propertyColumn(header:One, propertyName:A) propertyColumn(header:Two, propertyName:B) } } def frame = swing.frame(title:DEMO) { panel(layout: new BL()){ scrollPane(constraints: BL.NORTH) { table(myTable) } panel(constraints:BL.SOUTH) { button(text:追加, actionPerformed: { event -> data << [A:日本語, B:いけるかな] myTable.model.fireTableDataChanged() }) } } } frame.pack() frame.show() }}
    20. 20. 語れなかったその他• switch-case文のcase条件にクラスやク ロージャが使えるように強化された• @Singleton、@Immutable、 @Category、@Mixinといったアノテー ションを適用すると対応した機能が自動 で実装されるAST変換
    21. 21. 語れなかったその他• Grails • Groovy版Ruby on Rails• Gradle • Mavenのようなビルドツール。XMLでなく Groovyで記述• GParts • Groovy Parallel System;並列処理、非同期処理 などを実現するライブラリ
    22. 22. まとめ
    23. 23. Javaをやめて Groovyだ!
    24. 24. ご清聴ありがとうございました
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×