More Related Content
Similar to G*workshop sendai 20100424(v2)
Similar to G*workshop sendai 20100424(v2) (20)
More from Nobuhiro Sue (20)
G*workshop sendai 20100424(v2)
- 1. はじめての Groovy @G* ワークショップ in 仙台 2010/4/24 日本アイ・ビー・エム ( 株 ) 須江 信洋 [email_address] http://twitter.com/nobusue ※ 資料の内容は個人としての意見・見解を述べたものであり、 所属する企業・組織が内容を保証するものではありません。
- 10. まずは "Hello world" class HelloWorld { public static void main(String[] args){ System.out. println "Hello world" ; } } [Java] println 'Hello world' [Groovy] 定型的なコード (boilerplate code) を排除して、本質的な処理のみを記述すればよい
- 23. Groovy の数値リテラル データ型 リテラルの接尾辞 java.lang.Integer (int 範囲内の無印整数 ) 例) 15, 0x1234ffff java.lang.Long L,l java.lang.Float F,f java.lang.Double D,d java.math.BigInteger G,g,(int 範囲外の無印整数 ) java.math.BigDecimal G,g,( 無印小数 ),( 指数表記 ) 例) 1.23, 1.4E4, 2.8e4, 1.23g
- 29. List の便利メソッド assert [1,[2,3]]. flatten () == [1,2,3] assert [1,2,3]. intersect ([4,3,1]) == [3,1] assert [3,1,2]. sort () == [1,2,3] def list = [ [1,0], [0,1,2], [2,1,0] ] list = list. sort { a,b -> a[0] <=> b[0] } assert list = [ [0,1,2], [1,0], [2,1,0] ] def doubled = [1,2,3]. collect { it*2 } assert doubled == [2,4,6] assert [1,2,3]. join (‘-’) == ‘1-2-3’
- 34. Expando – 動的に拡張可能なオブジェクト def obj = new Expando() obj.hello = {println "Hello"} obj.hello() // Hello obj.param = "world" println obj.param // world インスタンス生成後にメソッドやフィールドの追加が可能 ⇒ Ruby のオープンクラスや、 JavaScript のプロトタイプベース・オブジェクト指向に近い機能
- 37. 制御構造の例 if (null) { assert false } else { assert true } def i = 0 while (i < 10) { i++ } assert i == 10 def clinks = 0 for (remainingGuests in 0..9) { clinks += remainingGuests } assert clinks == (10*9)/2 def list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for (j in list) { assert j == list[j] } list.each() { item -> assert item == list[item] }
- 39. 正規表現の例 def twister = 'she sells sea shells at the sea shore of Seychelles' assert twister =~ /s.a/ assert (twister ==~ /s.a/) == false assert twister ==~ /+( +)*/ def words = twister.split(/ /) assert words.size() == 10 switch('bear'){ case ~/..../ : assert true case ~/b.*/ : assert true; break default : assert false } def animals = ['cat', 'dog', 'bear', 'wolf', 'tiger', 'elephant'] assert animals.grep(~/.../) == ['cat', 'dog']
- 45. XmlParser def plan = new XmlParser().parse(new File('plan.xml')) println plan.name() // plan println plan.week[0].name() // week println plan.week[0].task[0].name() // task println plan.week[0].task[0].‘@title‘ // ProjectZero をダウンロードする <?xml version="1.0" encoding="Shift_JIS" ?> <plan> <week capacity="8"> <task done="1" cost="2" title="ProjectZero をダウンロードする " /> <task done="1" cost="3" title="Groovy プロジェクトを作成する " /> </week> <week capacity="8"> <task done=“0” cost=“1” title=“ テストケース作成 " /> <task done=“0” cost=“3” title=“ テスト実施する " /> </week> </plan> plan.xml Groovy (GPath による Xpath の様なパス式 )
- 46. XmlBuilder < tasks project=‘2'> < title >Install ProjectZero< /title > < title >Make Groovy project< /title > < title >Code it< /title > < /tasks >groovy.xml.MarkupBuilder@120cc56 def builder = new groovy.xml.MarkupBuilder(); builder. tasks ([project:2]) { title ("Install ProjectZero") title ("Make Groovy project") title ("Code it") } println builder Groovy 実行結果