SlideShare a Scribd company logo
1 of 25
Groovy!
るーたん / @luxion
自己紹介
•   HN

    •   無線LANるーたん

        •   社内で『るーたん派』が増えている…

•   お仕事

    •   フロント系サーバ(Apache)担当

    •   言語

        •   C++03, Python2.7, Perl, PHP5.3(Ext), XSLT,
            etc
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 == 10
hoge.number = 3
assert hoge.number == 3
プロパティの自動生成
class Hoge {
   final def number = 10
}


Hoge hoge = new Hoge()
assert hoge.number == 10
hoge.number = 3 // Err!
assert hoge.number == 3 // Err!
プロパティの自動生成
class Hoge {
   private def number = 10
}


Hoge hoge = new Hoge()
assert hoge.number == 10 //Err!
hoge.number = 3 // Err!
assert hoge.number == 3 // Err!
プロパティの自動生成
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!
クロージャ
Closure c1 = { println it*3 }
c1(4)


Closure c2 = { x -> println x*2 }
c2(2)


(1..100).each { println it }
クロージャ


new
FileInputStream("file.txt").eachLine{ line ->
println line }
GString

• ダブルクォートで括られた文字列の
  $変数名 、 ${式} のプレースホルダを
 GStringと呼ぶ

• $変数名では変数が展開され、${式}では
 式の結果が展開される
GString

def 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"], ["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"]]
コレクション用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]
Builder

• HTMLやXMLといったマークアップ言語
 のデータ構造を作成する
 MarkupBuilder

• Swingの構造を作成するSwingBuilder
Swing Builder
import groovy.swing.SwingBuilder
import java.awt.BorderLayout as BL


class 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()
    }
}
語れなかったその他
• switch-case文のcase条件にクラスやク
 ロージャが使えるように強化された

• @Singleton、@Immutable、
 @Category、@Mixinといったアノテー
 ションを適用すると対応した機能が自動
 で実装されるAST変換
語れなかったその他
•   Grails

    •   Groovy版Ruby on Rails

•   Gradle

    •   Mavenのようなビルドツール。XMLでなく
        Groovyで記述

•   GParts

    •   Groovy Parallel System;並列処理、非同期処理
        などを実現するライブラリ
まとめ
Javaをやめて
 Groovyだ!
ご清聴
ありがとうございました

More Related Content

What's hot

Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoShoot Morii
 
Rubyでやろう。データ解析導入編( CSV, XML, JSON)
Rubyでやろう。データ解析導入編( CSV, XML, JSON)Rubyでやろう。データ解析導入編( CSV, XML, JSON)
Rubyでやろう。データ解析導入編( CSV, XML, JSON)NAKAOKU Takahiro
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPUgos-k
 
CouchDBをヤラナイカ
CouchDBをヤラナイカCouchDBをヤラナイカ
CouchDBをヤラナイカMakoto Ohnami
 
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)Yoichi Nakayama
 
Nambapm_napthats
Nambapm_napthatsNambapm_napthats
Nambapm_napthatsnapthats
 
Mac_Terminal_ver1.0
Mac_Terminal_ver1.0Mac_Terminal_ver1.0
Mac_Terminal_ver1.0Satoshi Kume
 
Brookよもやま話
Brookよもやま話Brookよもやま話
Brookよもやま話Daichi Hiroki
 
mlr-grep - レコード指向grep
mlr-grep - レコード指向grepmlr-grep - レコード指向grep
mlr-grep - レコード指向grepRyoichi KATO
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bashJun Nogata
 
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹CODE BLUE
 
MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略ippei_suzuki
 
Re:VIEW新パーサ現状確認(2015年2月版)
Re:VIEW新パーサ現状確認(2015年2月版)Re:VIEW新パーサ現状確認(2015年2月版)
Re:VIEW新パーサ現状確認(2015年2月版)masayoshi takahashi
 
Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]
Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]
Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]創史 花村
 
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swiftみんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swiftTomohiro Kumagai
 

What's hot (19)

MongoDBの使い方
MongoDBの使い方MongoDBの使い方
MongoDBの使い方
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
 
Rubyでやろう。データ解析導入編( CSV, XML, JSON)
Rubyでやろう。データ解析導入編( CSV, XML, JSON)Rubyでやろう。データ解析導入編( CSV, XML, JSON)
Rubyでやろう。データ解析導入編( CSV, XML, JSON)
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPU
 
Drag anddropfilereader
Drag anddropfilereaderDrag anddropfilereader
Drag anddropfilereader
 
CouchDBをヤラナイカ
CouchDBをヤラナイカCouchDBをヤラナイカ
CouchDBをヤラナイカ
 
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
 
Nambapm_napthats
Nambapm_napthatsNambapm_napthats
Nambapm_napthats
 
Mac_Terminal_ver1.0
Mac_Terminal_ver1.0Mac_Terminal_ver1.0
Mac_Terminal_ver1.0
 
Oneliner
OnelinerOneliner
Oneliner
 
Brookよもやま話
Brookよもやま話Brookよもやま話
Brookよもやま話
 
mlr-grep - レコード指向grep
mlr-grep - レコード指向grepmlr-grep - レコード指向grep
mlr-grep - レコード指向grep
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
 
MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略
 
Re:VIEW新パーサ現状確認(2015年2月版)
Re:VIEW新パーサ現状確認(2015年2月版)Re:VIEW新パーサ現状確認(2015年2月版)
Re:VIEW新パーサ現状確認(2015年2月版)
 
Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]
Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]
Neo4jでつなぐ知見のネットワーク [Pycon2016 LT]
 
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swiftみんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
 

Viewers also liked

Aizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous IntegrationAizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous IntegrationTomoaki Tamura
 
Aizu.LT15 アンチクリスマス編
Aizu.LT15 アンチクリスマス編Aizu.LT15 アンチクリスマス編
Aizu.LT15 アンチクリスマス編Tomoaki Tamura
 
What's Next in Growth? 2016
What's Next in Growth? 2016What's Next in Growth? 2016
What's Next in Growth? 2016Andrew Chen
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome EconomyHelge Tennø
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
 

Viewers also liked (7)

Aizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous IntegrationAizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous Integration
 
Aizult13るーたん
Aizult13るーたんAizult13るーたん
Aizult13るーたん
 
Aizu lt tokyo_intro
Aizu lt tokyo_introAizu lt tokyo_intro
Aizu lt tokyo_intro
 
Aizu.LT15 アンチクリスマス編
Aizu.LT15 アンチクリスマス編Aizu.LT15 アンチクリスマス編
Aizu.LT15 アンチクリスマス編
 
What's Next in Growth? 2016
What's Next in Growth? 2016What's Next in Growth? 2016
What's Next in Growth? 2016
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome Economy
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
 

Similar to Aizu lt tokyo_luxion

JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門Shohei Arai
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)Nobuhiro Sue
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までMasahiro Wakame
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1Susisu
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそDavid Buck
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5Nishida Kansuke
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜Hiromi Ishii
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へonozaty
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうHishikawa Takuro
 

Similar to Aizu lt tokyo_luxion (20)

JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそ
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょう
 

Aizu lt tokyo_luxion

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n