Your SlideShare is downloading. ×
こんにちはGroovy
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

こんにちはGroovy

4,784
views

Published on

第1回プログラミングGroovy勉強会(大阪)のスライドです。

第1回プログラミングGroovy勉強会(大阪)のスライドです。


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

No Downloads
Views
Total Views
4,784
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
7
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. こんにちは Groovy #ghello で学ぶ Groovy 第 1 回プログラミング Groovy 勉強会 @irof
  • 2. #ghello?
  • 3. こんなの
  • 4. #ghello ルール?
    • とにかく 1Tweet に収まること
    • 5. Hello Worldっぽいものなら何でもOK
      • 画像でも、Helloだけでも
    • 環境依存は番外編扱い
    • 6. 今でも勝手に延長戦していいっぽい
  • 7. 感想 おもしろい レベル高すぎ 意味が判らない 勉強になる
  • 8. んじゃ解説でもするか 私もわからないし
  • 9. なんかすみません…
  • 10. #1 @kazuchika
  • 11. String#toURI()
    • GDK
      • Groovy JDK
      • 12. プログラミングGROOVY P.177
    • 文字列をURIにする。だけ。
  • 13. Desktop.desktop.browse(URI)
    • class java.awt.Desktop
      • Javaに普通にある
    • Desktop#brouse(URI)
      • Javaに普通に(ry
    • static Desktop getDesktop()
      • getterはプロパティとして扱える
  • 14. #2 @kiy0taka
  • 15. SwingBuilder
    • Builderの代表格
      • Swingが簡単に書けるよ!
      • 16. プログラミングGROOVY P.139
  • 17. #3 @nobeans groovy:000> (上のコード) hello ===> null
  • 18. propertyMissing(String)
    • 素直に実行すると例外
      • MissingPropertyException
    • 定義しとけばこれが呼ばれる
    • 19. methodMissingってのもある
    • 20. http://groovy.codehaus.org/Using+methodMissing+and+propertyMissing
  • 21. [h,e,l*2,o]
    • Listリテラル
      • プログラミングGROOVY P.82
      • 22. 大カッコで囲むだけ
        • add並べなくて良い
        • 23. 中身はjava.util.ArrayList
  • 24. [h,e,l*2,o]
    • String * 2
      • 文字列が掛け算できます
      • 25. assert ‘a’ * 3 == ‘aaa’
      • 26. *は multiply(Number) のこと
        • ‘l’.multiply(2) と同じ
  • 27. List#join()
    • Listをくっつけてくれる
      • 引数でセパレータ指定できる
    assert [a,b,c].join() == ‘abc’ assert [a,b,c].join(‘,’) == ‘a,b,c’
  • 28. println(String)
    • Objectクラスに追加されてるメソッド
    • 29. System.out.printlnってめんどい
      • めんどいからメソッド追加しといたよ!
    • 3つ目でやっと登場
  • 30. #4 @fumokmm groovy:000> (上のコード) Hello World ===> null
  • 31. String#toURL()
    • 省略
  • 32. URL#getText()
    • URLの指定しているページを取得する
      • これJavaでやろうとすると超面倒
      • 33. API叩くのとかこれで良いわけで…
      • 34. Groovyの反則技代表だと思ってる
        • FileのgetTextとかeachLineとか
  • 35. Closure (P.71)
    • def clos = {arg -> println arg}
    • 36. 引数は -> の前に書く
      • 省略した場合は暗黙でitになる
      • 37. def clos = {println it}
    • ザックリ言うと処理の断片
      • 他の処理と組み合わせて使うもの
  • 38. String#find( Pattern,Closure )
    • ~はパターンオブジェクト生成 (P.116)
    • 39. /hoge/ は文字列リテラル (P.67)
      • だから ~'hoge' と書くのと同じ
    • Closureのitは(この場合)ArrayList
      • 丸カッコ無しだとString
      • 40. Groovy1.6 あたりでかわったっぽい
  • 41. “何らかの文字列”[33..43]
    • インデックス指定で一部が取り出せる
      • assert 'abcde'[3] == 'd'
    • 範囲も使える
      • 33..43 は範囲(Range)の生成
      • 42. assert 'abcde'[2..4] == 'cde'
  • 43. #5 @orange_clover groovy:000> (上のコード) Hello World ===> null
  • 44. Object.each(Closure)
    • 個々の要素をClosureで処理できる
    • 45. 何気にCollectionじゃなくObject
    • 46. 引数のClosureは丸カッコの外に出せる
      • Object.each({closure})
      • 47. Object.each(){closure}
      • 48. Object.each{closure}
  • 49. そのご
  • 50. #6 @kyon_mm groovy:000> (上のコード) [echo] Hello World ===> org.apache.tools.ant.taskdefs.Echo@259 27275
  • 51. AntBuilder
    • みんなだいすき Ant
      • のBuilder (P.134)
      • 52. 実行まで出来ちゃう
    • echo(‘hello’)
      • <echo message=”hello”/>
    • Gantってのもある (P.233)
  • 53. #7 @bluepapa32
  • 54. SwingBuilder
    • 今度はダイアログじゃなくFrame
    • 55. 画像をダウンロードしてきて貼り付けてる
  • 56. #8 @irof groovy:000> ( 上のコード ) Hello, world! ===> null
  • 57. JsonSlurper#parseText
    • 文字列をJSONとして解釈する
    • 58. 変換前
      • {&quot;k1&quot;:&quot;Hello&quot;,&quot;k2&quot;:&quot;world&quot;}
    • 変換後
      • HashMap
      • 59. [k1:&quot;Hello&quot;, k2:&quot;world&quot;]
  • 60. Object#with(Closure)
    • ちょっと便利 (P.181)
    • 61. Closureの中の名前解決をwithが実行されたオブジェクトで行う
    • 62. VB.NETの With-End Withと似た感じ
  • 63. GString
    • Stringの中に変数や式が入れられる
    • 64. ダブルクォートで囲んだ時
      • println &quot;${k1}, ${k2}!&quot;
    • ここではGStringをwithで囲んでるのでMapのキーに対応する値に置換されてる
      • [k1:&quot;Hello&quot;, k2:&quot;world&quot;]
  • 65. #9 @mike_neck groovy:000> (上のコード) Hello World ===> null
  • 66. String#execute()
    • 文字列がそのままコマンドとして実行できる
    • 67. Mac な人は say しとけばいいよ
  • 68. #10 @kimukou_26 groovy:000> (上のコード) Hello world ===> null
  • 69. Javaっぽい
    • 普通に substring とか indexOf とかも使える
    • 70. new URL(String) でいい
      • String#toURL() もあるけど
    • URL#getText とか、わかりやすく便利なのをしれっと使っておけばGroovyっぽい
  • 71. #11 @tyuki39 groovy:000> (上のコード) Hello World ===> [Ljava.lang.reflect.Field;@29cb2 795
  • 72. 今まで出て来たのいろいろ
    • C.class.fields, Field.name
      • Class#getFields(),Field#getName()
    • Field[].each {}
    • 73. it[0..4] + ' ' + it[5..-1]
      • 範囲リテラル
      • 74. -1で一番最後
  • 75. #12 @nightmare_tim groovy:000> (上のコード) Hello World! ===> null
  • 76. for (P.108)
    • for(i in 0..10) とか書ける
    • 77. Listリテラルは勝手に拡張する
      • def a=[1,2,3]
      • 78. a[4] = 9
      • 79. assert a == [1,2,3,null,9]
        • List#add(4, 9)は例外になる
  • 80. #13 @backpaper0 PS> (上のコード) hello world PS>
  • 81. コマンドラインで実行
    • -e に続けて書くとそのまま実行できる
    • 82. Windowsだとたまに別の解釈されて変なファイルが出来たりして困る
  • 83. #14 @uehaj groovy:000> (上のコード) Hello, World ===> null
  • 84. リソース読んで切り出して
    • Class#getResource の戻りは URL
    • 85. それを getText()
      • エンコード不要なので text で取得
    • インデックス指定で切り出し
    • 86. 取り出してるのはJavadocの一部っぽい
  • 87. #15 @nagai_masato
  • 88. Object#each(Closure)
    • 再び(三度?)登場
    • 89. 今回の対象は String
    • 90. 文字列に each したら1文字ずつClosureに渡される
      • ‘abc’.each{print it*2}
        • aabbcc
  • 91. String#toInteger()
    • とくになし
  • 92. #16 @toby55kij groovy:000> (上のコード) Hello World ===> {Hello=World}
  • 93. JsonBuilder
    • JSONを組み立てるやつ
    • 94. BuilderのインスタンスにMapを渡したら新しい要素として扱うみたい
    • 95. Closureで書いても良いみたい
    • 96. 出来上がった後はMapになる
      • いまんとこは LinkedHashMap になる
  • 97. Map.each(Closure)
    • Closureの引数が1つの場合
      • Map$Entryが渡される
        • [a:1].each{println it}
    • Closureの引数が2つの場合
      • 第一引数にKey,第二引数にValueになる
        • [a:1].each{k,v->println k+v}
  • 98. #17 @nobusue groovy:000> (上のコード) Hello World! ===> null
  • 99. JavaScriptはじめました
    • ScriptEngineManagerはJavaの
    • 100. Javaのライブラリとかを手軽に試せたりするのもGroovyの魅力
  • 101. #18 @primnum groovy:000> (上のコード) Hello World ===> 0..10
  • 102. Object#eachWithIndex(Closure)
    • 引数を2つとるClosureを渡す
    groovy:000> 'abc'.eachWithIndex{a, b->println &quot;val:$a, index:$b&quot;} val:a, index:0 val:b, index:1 val:c, index:2 ===> abc
  • 103. #19 @torazuka groovy:000> (上のコード) HELLO, WORLD!! ===> null
  • 104. String#getAt
    • 引数は int, IntRange, EmptyRange, Range, Collection
    • 105. 指定したインデックスの文字を取り出す
    • 106. getAtは省略できたりする
    assert &quot;Oh! Well, Lord!&quot;[1,5,6,7,11] == &quot;hello&quot;
  • 107. #20 @bikisuke groovy> (上のコード) Hello World JUnit 4 Runner, Tests: 1, Failures: 0, Time: 114
  • 108. (補足)Spock 1.8の場合 @Grab('org.spockframework:spock-core:0.5-groovy-1.8') @GrabExclude('org.codehaus.groovy:groovy-all') class g extends spock.lang.Specification{ def&quot;h&quot;(){expect:println'Hello World'}}
  • 109. @Grab
    • 本編初登場
    • 110. Grape (P.194)
    • 111. アノテーション書いとくだけでライブラリ使える
      • 勝手にダウンロードしてきてクラスパスに追加してくれる
  • 112. Spock (P.241)
    • BDDフレームワーク
    • 113. あそこに座ってる人のほうが詳しい
    • 114. 実行結果見ればわかるようにJUnitで動いてる
    • 115. なのでJUnitテストとして実行できたり
      • (IntelliJ IDEAではできた)
  • 116. #21 @masanobuimai groovy> (GroovyConsole) Hello.World
  • 117. String#capitalize()
    • since 1.7.3
    • 118. 先頭を大文字にしてくれる
    • 119. だけ。
    • 120. なんか嬉しい?
    • 121. 英語圏だと嬉しいのかな?
  • 122. mainメソッド
    • classに書いとけばそれが実行される
      • classだけだとmainネーヨとか怒られる
    • 実行できれば良いから外に出す手もある
    package hello class World {} println World.class.name.capitalize()
  • 123. #22 @lemur314 groovy:000> (上のコード) Hello World ===> null
  • 124. String#reverse()
    • since 1.0
      • 昔からある!
        • ……何に使うの?
          • やっぱこういうとき?
  • 125. #23 touchez_du_bois groovy:000> (上のコード) println &quot;Hallo, Welt!&quot; ===> null
  • 126. SimpleTemplateEngine
    • templateを作れる
      • これの make にMapで渡せばOK
    • P.262
      • Groovyイン・アクション
  • 127. #24 @tyama groovy> (上のコード) hello world!
  • 128. 日本語DSL
    • せっかく ={}, 逃げてたのに ={}
      • 暗黙の引数itを受ける空クロージャ
        • 引数はnull
          • def 涙 , 笑
    • せっかく ( 涙 );; 逃げてたのに ( 笑 )
      • ;; は単にセミコロン
  • 129. まっマジ={a,b->...}
    • まっマジ っすか , せっかく ( 涙 )
      • カッコが省略されてる
      • 130. まっマジ ( っすか , せっかく ( 涙 ))
        • 両方nullですけども
      • このクロージャで出力されてる
  • 131. #25 @kanemu groovy:000>(上のコード) hello,world! ===> {a=h, b=e, c=l, d=l, e=o, f=,, g=w, h=o, i=r, j=l, k=d, l=!}
  • 132. Map#sort()
    • Since 1.7.2 って書いてるよ
    • 133. Map#sort(Closure)
      • [:].sort { a, b -> a.value <=> b.value }
    • Map#sort(Comparator)
      • [:].sort({ a, b -> a[-1] <=> b[-1] } as Comparator)
  • 134. #26 @osimajp
  • 135. Object#each(Closure)
    • とりあえずこの辺のクロージャ渡せるのは一通り覚えとくのが良いと思う
      • Collection (P.85)
      • 136. Object (P.183)
        • any, every, each
        • 137. collect, find, findAll
  • 138. #27 @fumokmm groovy:000> (上のコード) Hello World ===> null
  • 139.  
  • 140.  
  • 141. #28 @kazuchika groovy:000> (上のコードに;足したの) Thanks for joining #ghello! ===> null
  • 142. new Event(name:&quot;#ghello&quot;)
    • コンストラクタにマップを渡してフィールドを初期化できる (P.49)
    • 143. コンストラクタが無い時だけ
  • 144. 他にも...
  • 145. 他にも...
  • 146. 他にも...
  • 147. 他にも...
  • 148. 他にも...
  • 149. #ghello 延長戦中 (かも) 思いついたらつぶやいたら良いと思います ありがとうございました