SlideShare a Scribd company logo
1 of 60
はじめての Groovy @G* ワークショップ  in  仙台 2010/4/24 日本アイ・ビー・エム ( 株 )  須江 信洋 [email_address] http://twitter.com/nobusue ※ 資料の内容は個人としての意見・見解を述べたものであり、 所属する企業・組織が内容を保証するものではありません。
自己紹介 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Groovy とは?
Groovy とは ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]," Groovy is designed to help you get things done on the Java platform in a quicker, more concise and fun way - bringing the power of Python and Ruby inside the Java Platform."   Feature Rich Java Friendly other other other other Groovy
Javaフレンドリーな Groovy ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],簡単・コンパクト・読みやすいコード! Groovy コード Java コード JRE JVM GDK ライブラリー 言語仕様
Java 屋におすすめ、 Groovy ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Groovy はじめの一歩
まずはインストール (Windows の場合 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],当然ですが、 JDK(1.5 以上 ) も入れておいてね
Groovy スクリプトを実行する ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
まずは "Hello world" class HelloWorld { public static void main(String[] args){ System.out. println "Hello world" ; } } [Java] println 'Hello world' [Groovy] 定型的なコード (boilerplate code) を排除して、本質的な処理のみを記述すればよい
groovysh  使用上の注意 ,[object Object],[object Object],[object Object],※ x がスクリプトの binding に格納されるため、期待通りに動作する。  興味のある人は GINA の 11.2.2 節を参照のこと。
その他 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Object Browser ,[object Object],[object Object],[object Object]
困った時は・・・ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Groovy  基本の ' き '
Groovy :これだけおさえといて! ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Java と Groovy の違い ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
クラス宣言 ,[object Object],[object Object],[object Object],[object Object],class Book { private String title void setTitle(String theTitle) { title = theTitle } String getTitle(){ return title } } 定型的なコード (boilerplate code)
GroovyBean ,[object Object],[object Object],[object Object],class Book { String title } def aBook = new Book() aBook. setTitle ('Groovy Recipes') assert aBook. getTitle () == 'Groovy Recipes' aBook. title  = 'Groovy in Action' assert aBook. title  == 'Groovy in Action' aBook[ 'title' ] = 'Groovy in Action' assert aBook[ 'title' ] == 'Groovy in Action' 前頁と同じクラスの定義 スクリプト
拡張された文字列リテラル ,[object Object],def name = 'Bob' def greeting = "Hello, ${name}" def pattern = /./ def multiLineString = ''' Hello, world My name is Groovy.''' def multiLineGString = """ Hello, ${name} My name is Groovy.""" String GString GString(のエスケープ不要 ) 複数行 String 複数行 GString
Java のプリミティブ型(非オブジェクト) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Groovy では、プリミティブ型はすべてラッパークラス(オブジェクト)として処理される
数値とオブジェクト ,[object Object],[object Object],[object Object],def x = 1 def y = 2 assert x + y == 3 assert x.plus(y) == 3 assert x instanceof Integer
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
Groovy ツアー ,[object Object],[object Object],[object Object],[object Object],[object Object]
オブジェクトとコレクション操作 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GPath ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GPath  と  safe dereferencing operator ,[object Object],[object Object],[object Object],[object Object],[object Object]
List ,[object Object],[object Object],[object Object],[object Object],def roman = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII'] assert roman[4] == 'IV' roman[8] = 'VIII‘ roman << ‘IX’ assert roman. size()  == 10 def list1 = [] def list2 = [] as LinkedList 空の List(java.util.ArrayList) 空の List( 実装を指定 )
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’
Map ,[object Object],[object Object],[object Object],def http = [ 100 : 'CONTINUE', 200 : 'OK', 400 : 'BAD REQUEST' ] assert http[200] == 'OK' http[500] = 'INTERNAL SERVER ERROR' assert http. size()  == 4 def map1 = [:] def list2 = [:] as TreeMap  ← new TreeMap() と等価 空の Map(java.util.HashMap)
範囲 ,[object Object],[object Object],[object Object],[object Object],def x = 1..10 assert x.contains(5) assert x.contains(15) == false assert x.from == 1 assert x.to == 10 assert x.reverse() == 10..1 def y = 1..<10 assert y.contains(10) == false 境界値を含む 境界値を含まない
オブジェクトとしてのコード:クロージャ ,[object Object],[object Object],[object Object],[object Object],log = '' (1..10).each { log += it } assert log == '12345678910' map = ['a':1, 'b':2] def doubler =  {key, value -> map[key] = value * 2} map.each(doubler)  assert map == ['a':2, 'b':4] クロージャの引数が 1 つのときは、 it  で省略可能 クロージャを変数に代入可能
クロージャの例 p [1,2,3,4,5].select {|i| i%2==0 } Ruby println ([1,2,3,4,5].findAll {it%2==0 } ) Groovy ,[object Object],“ 動詞 (find)+ 目的語 (All) ”   の Java のメソッド表記ルールに準拠 it :  クロージャー内 イテレータのデフォルト定義
Expando –  動的に拡張可能なオブジェクト def obj = new Expando() obj.hello = {println &quot;Hello&quot;} obj.hello()     // Hello obj.param = &quot;world&quot; println obj.param  // world インスタンス生成後にメソッドやフィールドの追加が可能 ⇒   Ruby のオープンクラスや、 JavaScript のプロトタイプベース・オブジェクト指向に近い機能
制御構造 ,[object Object],[object Object],[object Object]
Groovy の真偽判定 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
制御構造の例 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] }
正規表現 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
正規表現の例 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']
実用的に拡張された switch ~ case ,[object Object],def x = 1.23 def result = '' switch (x) { case &quot;foo&quot; : result = &quot;found foo&quot; case &quot;bar&quot; : result += &quot;bar&quot;; break case [4,5,6,'inList'] : result = &quot;list&quot;; break case 12..30 : result = &quot;range&quot;; break case Integer : result = &quot;integer&quot;; break case Number : result = &quot;number&quot;; break default: result = &quot;default&quot; } println result
GDK: JDK のクラスを勝手に拡張 ,[object Object],new File('sample.txt'). eachLine { line -> if( line.size() > 4 ) println line } ファイルを 1 行づつ読み込んで、 文字数が4以上の行を表示 java.io.File にメソッド eachLine(Closure) を追加
演算子オーバーライドと Category ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Category の例:日付操作 ,[object Object],[object Object],[object Object],[object Object],def date = new Date() use(org.codehaus.groovy.runtime.TimeCategory){ date = date + 9.hours + 5.minutes } ⇒ Java では???
XML 操作 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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=&quot;1.0&quot; encoding=&quot;Shift_JIS&quot; ?>  <plan>    <week capacity=&quot;8&quot;>    <task done=&quot;1&quot; cost=&quot;2&quot; title=&quot;ProjectZero をダウンロードする &quot; />    <task done=&quot;1&quot; cost=&quot;3&quot; title=&quot;Groovy  プロジェクトを作成する &quot; />   </week>   <week capacity=&quot;8&quot;>     <task done=“0” cost=“1” title=“ テストケース作成 &quot; />    <task done=“0” cost=“3” title=“ テスト実施する &quot; />   </week>  </plan> plan.xml Groovy   (GPath による Xpath の様なパス式 )
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 (&quot;Install ProjectZero&quot;) title (&quot;Make Groovy project&quot;) title (&quot;Code it&quot;) } println builder Groovy 実行結果
Groovy お得情報 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
手軽に Groovy を試す ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Groovy web console(JGGUG ver.)
ライブラリの配布を楽にする :Grape ,[object Object],[object Object],[object Object],@Grab( group = 'net.homeip.yusuke', module='twitter4j', version='*') import twitter4j.Twitter Twitter twitter = new Twitter(&quot;<user>&quot;,&quot;<pass>&quot;) twitter.update(args[0]) Twitter4j を使った Twitter クライアント このファイルだけで動きます!! ( 要 Groovy-1.7 以上 )
ビルドを便利にする ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
テストを楽にする : Power Assert ,[object Object],[object Object],[object Object],def a = 1 def b = 2 def c = 3 assert (a+b)*c == 5 途中結果や、どこで fail したかまで教えてくれる。 assertEquals() とかを組み合わせる必要ナシ。
GAEJ をサクッと使う : Gaelyk ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Groovy の起動を早くする : GroovyServ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],論より証拠。 デモをご覧ください。
Groovy のパフォーマンスを改善する ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
まとめ
Groovy 、面白いのでとにかく使ってみて! ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
さて、ここで問題です。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Groovy の情報源 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Let’s get groovy!

More Related Content

What's hot

UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張Ryota Murohoshi
 
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Yukiko Kato
 
Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】Yukiko Kato
 
LINQソースでGO!
LINQソースでGO!LINQソースでGO!
LINQソースでGO!Kouji Matsui
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用nagise
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~Fujio Kojima
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLShinichiAoyagi
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?Kenji Nakamura
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】Yukiko Kato
 
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsC#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsFumitaka Yamada
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろTakuya Tsuchida
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 

What's hot (20)

Boost Fusion Library
Boost Fusion LibraryBoost Fusion Library
Boost Fusion Library
 
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
 
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】
 
Unityで覚えるC#
Unityで覚えるC#Unityで覚えるC#
Unityで覚えるC#
 
Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】
 
LINQソースでGO!
LINQソースでGO!LINQソースでGO!
LINQソースでGO!
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
日本語形態素解析
日本語形態素解析日本語形態素解析
日本語形態素解析
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】
 
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsC#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to Objects
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 

Viewers also liked

What Can I Do Now? (web 2.0 pedagogy) v3.4
What Can I Do Now? (web 2.0 pedagogy) v3.4What Can I Do Now? (web 2.0 pedagogy) v3.4
What Can I Do Now? (web 2.0 pedagogy) v3.4Darren Kuropatwa
 
Linuxcon Europe 2013 | Keynote: We Won What's Next
Linuxcon Europe 2013 | Keynote: We Won What's NextLinuxcon Europe 2013 | Keynote: We Won What's Next
Linuxcon Europe 2013 | Keynote: We Won What's NextMark Hinkle
 
Cloud Computing Expo West - Crash Course in Open Source Cloud Computing
Cloud Computing Expo West - Crash Course in Open Source Cloud ComputingCloud Computing Expo West - Crash Course in Open Source Cloud Computing
Cloud Computing Expo West - Crash Course in Open Source Cloud ComputingMark Hinkle
 
Build a Cloud Day SF - Crash Course on Open Source Cloud Computing
Build a Cloud Day SF - Crash Course on Open Source Cloud ComputingBuild a Cloud Day SF - Crash Course on Open Source Cloud Computing
Build a Cloud Day SF - Crash Course on Open Source Cloud ComputingMark Hinkle
 
Keynote: Community, Code and Companies - Mark Hinkle, Director of Open Source...
Keynote: Community, Code and Companies - Mark Hinkle, Director of Open Source...Keynote: Community, Code and Companies - Mark Hinkle, Director of Open Source...
Keynote: Community, Code and Companies - Mark Hinkle, Director of Open Source...Mark Hinkle
 
LinuxFest Northwest: Crash Course in Open Source Cloud Computing
LinuxFest Northwest: Crash Course in Open Source Cloud Computing LinuxFest Northwest: Crash Course in Open Source Cloud Computing
LinuxFest Northwest: Crash Course in Open Source Cloud Computing Mark Hinkle
 
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)codeal
 
Great Wide Open: Crash Course Open Source Cloud Computing - 2014
Great Wide Open: Crash Course Open Source Cloud Computing - 2014Great Wide Open: Crash Course Open Source Cloud Computing - 2014
Great Wide Open: Crash Course Open Source Cloud Computing - 2014Mark Hinkle
 
A project report on e business
A project report on e businessA project report on e business
A project report on e businessVerma Pramod
 

Viewers also liked (11)

Puphpet
PuphpetPuphpet
Puphpet
 
What Can I Do Now? (web 2.0 pedagogy) v3.4
What Can I Do Now? (web 2.0 pedagogy) v3.4What Can I Do Now? (web 2.0 pedagogy) v3.4
What Can I Do Now? (web 2.0 pedagogy) v3.4
 
Linuxcon Europe 2013 | Keynote: We Won What's Next
Linuxcon Europe 2013 | Keynote: We Won What's NextLinuxcon Europe 2013 | Keynote: We Won What's Next
Linuxcon Europe 2013 | Keynote: We Won What's Next
 
Cloud Computing Expo West - Crash Course in Open Source Cloud Computing
Cloud Computing Expo West - Crash Course in Open Source Cloud ComputingCloud Computing Expo West - Crash Course in Open Source Cloud Computing
Cloud Computing Expo West - Crash Course in Open Source Cloud Computing
 
Build a Cloud Day SF - Crash Course on Open Source Cloud Computing
Build a Cloud Day SF - Crash Course on Open Source Cloud ComputingBuild a Cloud Day SF - Crash Course on Open Source Cloud Computing
Build a Cloud Day SF - Crash Course on Open Source Cloud Computing
 
Keynote: Community, Code and Companies - Mark Hinkle, Director of Open Source...
Keynote: Community, Code and Companies - Mark Hinkle, Director of Open Source...Keynote: Community, Code and Companies - Mark Hinkle, Director of Open Source...
Keynote: Community, Code and Companies - Mark Hinkle, Director of Open Source...
 
LinuxFest Northwest: Crash Course in Open Source Cloud Computing
LinuxFest Northwest: Crash Course in Open Source Cloud Computing LinuxFest Northwest: Crash Course in Open Source Cloud Computing
LinuxFest Northwest: Crash Course in Open Source Cloud Computing
 
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
 
Great Wide Open: Crash Course Open Source Cloud Computing - 2014
Great Wide Open: Crash Course Open Source Cloud Computing - 2014Great Wide Open: Crash Course Open Source Cloud Computing - 2014
Great Wide Open: Crash Course Open Source Cloud Computing - 2014
 
A project report on e business
A project report on e businessA project report on e business
A project report on e business
 
E commerce ppt
E commerce pptE commerce ppt
E commerce ppt
 

Similar to G*workshop sendai 20100424(v2)

JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門Shohei Arai
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyYasuharu Nakano
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてkimukou_26 Kimukou
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Uehara Junji
 
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介Yuki Fujisawa
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Nextdynamis
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそDavid Buck
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会Mugen Fujii
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するkwatch
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術Koichi Fujikawa
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublishedYoichiro Sakurai
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようShinsuke Sugaya
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまでMugen Fujii
 

Similar to G*workshop sendai 20100424(v2) (20)

JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
 
Spock's world
Spock's worldSpock's world
Spock's world
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそ
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
Refactoring point of Kotlin application
Refactoring point of Kotlin applicationRefactoring point of Kotlin application
Refactoring point of Kotlin application
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
 

More from Nobuhiro Sue

Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on GuideNobuhiro Sue
 
Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on GuideNobuhiro Sue
 
Knative CloudEvents
Knative CloudEventsKnative CloudEvents
Knative CloudEventsNobuhiro Sue
 
JTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusueJTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusueNobuhiro Sue
 
DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711Nobuhiro Sue
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpNobuhiro Sue
 
Light and shadow of microservices
Light and shadow of microservicesLight and shadow of microservices
Light and shadow of microservicesNobuhiro Sue
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_introNobuhiro Sue
 
Jjug 20140430 gradle_intro
Jjug 20140430 gradle_introJjug 20140430 gradle_intro
Jjug 20140430 gradle_introNobuhiro Sue
 
Gws 20140418 camel_groovy
Gws 20140418 camel_groovyGws 20140418 camel_groovy
Gws 20140418 camel_groovyNobuhiro Sue
 
20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_Groovy20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_GroovyNobuhiro Sue
 
Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Nobuhiro Sue
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
クラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaSクラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaSNobuhiro Sue
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryNobuhiro Sue
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradleNobuhiro Sue
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427Nobuhiro Sue
 
Html5勉強会 20120423
Html5勉強会 20120423Html5勉強会 20120423
Html5勉強会 20120423Nobuhiro Sue
 

More from Nobuhiro Sue (20)

Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on Guide
 
Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on Guide
 
Knative CloudEvents
Knative CloudEventsKnative CloudEvents
Knative CloudEvents
 
JTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusueJTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusue
 
DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocp
 
Light and shadow of microservices
Light and shadow of microservicesLight and shadow of microservices
Light and shadow of microservices
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_intro
 
Jjug 20140430 gradle_intro
Jjug 20140430 gradle_introJjug 20140430 gradle_intro
Jjug 20140430 gradle_intro
 
Gws 20140418 camel_groovy
Gws 20140418 camel_groovyGws 20140418 camel_groovy
Gws 20140418 camel_groovy
 
20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_Groovy20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_Groovy
 
Gws 20140117 lt
Gws 20140117 ltGws 20140117 lt
Gws 20140117 lt
 
Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
クラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaSクラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaS
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427
 
Html5勉強会 20120423
Html5勉強会 20120423Html5勉強会 20120423
Html5勉強会 20120423
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

G*workshop sendai 20100424(v2)

  • 1. はじめての Groovy @G* ワークショップ in 仙台 2010/4/24 日本アイ・ビー・エム ( 株 )  須江 信洋 [email_address] http://twitter.com/nobusue ※ 資料の内容は個人としての意見・見解を述べたものであり、 所属する企業・組織が内容を保証するものではありません。
  • 2.
  • 4.
  • 5.
  • 6.
  • 8.
  • 9.
  • 10. まずは &quot;Hello world&quot; class HelloWorld { public static void main(String[] args){ System.out. println &quot;Hello world&quot; ; } } [Java] println 'Hello world' [Groovy] 定型的なコード (boilerplate code) を排除して、本質的な処理のみを記述すればよい
  • 11.
  • 12.
  • 13.
  • 14.
  • 15. Groovy 基本の ' き '
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 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
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 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’
  • 30.
  • 31.
  • 32.
  • 33.
  • 34. Expando – 動的に拡張可能なオブジェクト def obj = new Expando() obj.hello = {println &quot;Hello&quot;} obj.hello()    // Hello obj.param = &quot;world&quot; println obj.param // world インスタンス生成後にメソッドやフィールドの追加が可能 ⇒   Ruby のオープンクラスや、 JavaScript のプロトタイプベース・オブジェクト指向に近い機能
  • 35.
  • 36.
  • 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] }
  • 38.
  • 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']
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 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=&quot;1.0&quot; encoding=&quot;Shift_JIS&quot; ?> <plan>   <week capacity=&quot;8&quot;>    <task done=&quot;1&quot; cost=&quot;2&quot; title=&quot;ProjectZero をダウンロードする &quot; />    <task done=&quot;1&quot; cost=&quot;3&quot; title=&quot;Groovy プロジェクトを作成する &quot; />   </week>   <week capacity=&quot;8&quot;>    <task done=“0” cost=“1” title=“ テストケース作成 &quot; />    <task done=“0” cost=“3” title=“ テスト実施する &quot; />   </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 (&quot;Install ProjectZero&quot;) title (&quot;Make Groovy project&quot;) title (&quot;Code it&quot;) } println builder Groovy 実行結果
  • 47.
  • 48.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 57.
  • 58.
  • 59.