Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
こんにちは  Groovy #ghello  で学ぶ Groovy 第 1 回プログラミング Groovy 勉強会 @irof
#ghello?
こんなの
#ghello ルール? <ul><li>とにかく 1Tweet に収まること
Hello Worldっぽいものなら何でもOK </li><ul><li>画像でも、Helloだけでも </li></ul><li>環境依存は番外編扱い
今でも勝手に延長戦していいっぽい </li></ul>
感想 おもしろい レベル高すぎ 意味が判らない 勉強になる
んじゃ解説でもするか 私もわからないし
なんかすみません…
#1 @kazuchika
String#toURI() <ul><li>GDK </li><ul><li>Groovy JDK
プログラミングGROOVY P.177 </li></ul><li>文字列をURIにする。だけ。 </li></ul>
Desktop.desktop.browse(URI) <ul><li>class java.awt.Desktop </li><ul><li>Javaに普通にある </li></ul><li>Desktop#brouse(URI) </li>...
#2 @kiy0taka
SwingBuilder <ul><li>Builderの代表格 </li><ul><li>Swingが簡単に書けるよ!
プログラミングGROOVY P.139 </li></ul></ul>
#3 @nobeans groovy:000> (上のコード) hello ===> null
propertyMissing(String) <ul><li>素直に実行すると例外 </li><ul><li>MissingPropertyException </li></ul><li>定義しとけばこれが呼ばれる
methodMissingってのもある
http://groovy.codehaus.org/Using+methodMissing+and+propertyMissing </li></ul>
[h,e,l*2,o] <ul><li>Listリテラル </li><ul><li>プログラミングGROOVY P.82
大カッコで囲むだけ </li><ul><li>add並べなくて良い
中身はjava.util.ArrayList </li></ul></ul></ul>
[h,e,l*2,o] <ul><li>String * 2 </li><ul><li>文字列が掛け算できます
assert ‘a’ * 3 == ‘aaa’
*は multiply(Number) のこと </li><ul><li>‘l’.multiply(2) と同じ </li></ul></ul></ul>
List#join() <ul><li>Listをくっつけてくれる </li><ul><li>引数でセパレータ指定できる </li></ul></ul>assert [a,b,c].join() == ‘abc’ assert [a,b,c]....
println(String) <ul><li>Objectクラスに追加されてるメソッド
System.out.printlnってめんどい </li><ul><li>めんどいからメソッド追加しといたよ! </li></ul><li>3つ目でやっと登場 </li></ul>
#4 @fumokmm groovy:000>  (上のコード) Hello World ===> null
String#toURL() <ul><li>省略 </li></ul>
URL#getText() <ul><li>URLの指定しているページを取得する </li><ul><li>これJavaでやろうとすると超面倒
API叩くのとかこれで良いわけで…
Groovyの反則技代表だと思ってる </li><ul><li>FileのgetTextとかeachLineとか </li></ul></ul></ul>
Closure (P.71) <ul><li>def clos = {arg -> println arg}
引数は -> の前に書く </li><ul><li>省略した場合は暗黙でitになる
def clos = {println it} </li></ul><li>ザックリ言うと処理の断片 </li><ul><li>他の処理と組み合わせて使うもの </li></ul></ul>
String#find( Pattern,Closure ) <ul><li>~はパターンオブジェクト生成 (P.116)
/hoge/ は文字列リテラル (P.67) </li><ul><li>だから ~'hoge' と書くのと同じ </li></ul><li>Closureのitは(この場合)ArrayList </li><ul><li>丸カッコ無しだとString
Groovy1.6 あたりでかわったっぽい </li></ul></ul>
“何らかの文字列”[33..43] <ul><li>インデックス指定で一部が取り出せる </li><ul><li>assert 'abcde'[3] == 'd' </li></ul><li>範囲も使える </li><ul><li>33..43...
assert 'abcde'[2..4] == 'cde' </li></ul></ul>
#5 @orange_clover  groovy:000>  (上のコード) Hello World ===> null
Object.each(Closure) <ul><li>個々の要素をClosureで処理できる
何気にCollectionじゃなくObject
引数のClosureは丸カッコの外に出せる </li><ul><li>Object.each({closure})
Object.each(){closure}
Object.each{closure} </li></ul></ul>
そのご
#6 @kyon_mm groovy:000>  (上のコード) [echo] Hello World ===> org.apache.tools.ant.taskdefs.Echo@259 27275
AntBuilder <ul><li>みんなだいすき Ant </li><ul><li>のBuilder (P.134)
実行まで出来ちゃう </li></ul><li>echo(‘hello’) </li><ul><li><echo message=”hello”/> </li></ul><li>Gantってのもある (P.233) </li></ul>
#7 @bluepapa32
SwingBuilder <ul><li>今度はダイアログじゃなくFrame
画像をダウンロードしてきて貼り付けてる </li></ul>
#8 @irof groovy:000> ( 上のコード ) Hello, world! ===> null
JsonSlurper#parseText <ul><li>文字列をJSONとして解釈する
変換前 </li><ul><li>{&quot;k1&quot;:&quot;Hello&quot;,&quot;k2&quot;:&quot;world&quot;} </li></ul><li>変換後 </li><ul><li>HashMap
[k1:&quot;Hello&quot;, k2:&quot;world&quot;] </li></ul></ul>
Object#with(Closure) <ul><li>ちょっと便利 (P.181)
Closureの中の名前解決をwithが実行されたオブジェクトで行う
VB.NETの With-End Withと似た感じ </li></ul>
GString <ul><li>Stringの中に変数や式が入れられる
ダブルクォートで囲んだ時 </li><ul><li>println &quot;${k1}, ${k2}!&quot; </li></ul><li>ここではGStringをwithで囲んでるのでMapのキーに対応する値に置換されてる </li>...
#9 @mike_neck groovy:000> (上のコード) Hello World ===> null
String#execute() <ul><li>文字列がそのままコマンドとして実行できる
Mac な人は  say  しとけばいいよ </li></ul>
#10 @kimukou_26 groovy:000> (上のコード) Hello world ===> null
Javaっぽい <ul><li>普通に substring とか indexOf とかも使える
new URL(String) でいい </li><ul><li>String#toURL() もあるけど </li></ul><li>URL#getText とか、わかりやすく便利なのをしれっと使っておけばGroovyっぽい </li></ul>
#11 @tyuki39 groovy:000> (上のコード) Hello World ===> [Ljava.lang.reflect.Field;@29cb2 795
今まで出て来たのいろいろ <ul><li>C.class.fields, Field.name </li><ul><li>Class#getFields(),Field#getName() </li></ul><li>Field[].each {}
it[0..4] + ' ' + it[5..-1] </li><ul><li>範囲リテラル
-1で一番最後 </li></ul></ul>
#12 @nightmare_tim groovy:000> (上のコード) Hello World! ===> null
for (P.108) <ul><li>for(i in 0..10) とか書ける
Listリテラルは勝手に拡張する </li><ul><li>def a=[1,2,3]
a[4] = 9
assert a == [1,2,3,null,9] </li><ul><li>List#add(4, 9)は例外になる </li></ul></ul></ul>
#13 @backpaper0 PS> (上のコード) hello world PS>
コマンドラインで実行 <ul><li>-e に続けて書くとそのまま実行できる
Windowsだとたまに別の解釈されて変なファイルが出来たりして困る </li></ul>
#14 @uehaj groovy:000> (上のコード) Hello, World ===> null
リソース読んで切り出して <ul><li>Class#getResource の戻りは URL
それを getText() </li><ul><li>エンコード不要なので text で取得 </li></ul><li>インデックス指定で切り出し
取り出してるのはJavadocの一部っぽい </li></ul>
#15 @nagai_masato
Object#each(Closure) <ul><li>再び(三度?)登場
Upcoming SlideShare
Loading in …5
×

こんにちはGroovy

5,862 views

Published on

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

  • Best dissertation help you can get, thank god a friend suggested me ⇒⇒⇒WRITE-MY-PAPER.net ⇐⇐⇐ otherwise I could have never completed my dissertation on time.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ❤❤❤ http://bit.ly/36cXjBY ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ♥♥♥ http://bit.ly/36cXjBY ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

こんにちはGroovy

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

×