SlideShare a Scribd company logo
1 of 86
Download to read offline
JGGUG / NTTソフト道場 共催
今だから始めよう
Groovyブートキャンプ2015夏
2015/08/07
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved.
準備
•演習マテリアル、準備などはこちらか
ら
–https://github.com/uehaj/groovy-
bootcamp2015
2
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 3
NTTソフト道場のご紹介
実務経験豊富な当社プロフェッショナル社員の実践経験から得られたノウハウを研
修カリキュラムとしてご提供します
Jenkins
Android Grails/Groovy
モダンWebデザイン
OSSVERT・Web3層構築仮想化
テストツール
NW構築
SW
運用管理セグメント
SW
eth0 eth3
bond0
eth2
xen1/dom0
eth0
eth0
eth0
eth0
eth2 eth1
eth1
eth2
eth1
eth2 eth1
eth2
eth3eth0
bond0
WEB
xen2/dom0
eth0
eth0
eth0
eth0
eth2eth1
eth1
eth2
eth1
eth2
eth1
xenbr4xenbr3 xenbr4
xenbr1
xenbr3
xenbr1
外部ネットワークSW外部セグメント
xenbr0xenbr2
xenbr0xenbr2
tag10
tag30
tag20
tag10
tag30
tag20
物理サーバ1 物理サーバ2
WEB
AP AP
DB DB
Apache Web ServerApache Web Server
Ultra Monkey
Heartbeat
PREX
CentOS5.5
OSS・DB
レガシーコード改善
セキュリティ
開発言語・フレームワーク
IPv6
開発テクニック
インフラ構築
ストレージ
CSS3
6年間で2000名以上の人材育成実績
H21年度 9カリキュラム 17回(講師10名) 受講者143名
H22年度 14カリキュラム 24回(講師16名) 受講者299名
H23年度 23カリキュラム 36回(講師23名) 受講者394名
H24年度 27カリキュラム 55回(講師47名) 受講者597名
H25年度 21カリキュラム 25回(講師50名) 受講者323名
H26年度 32カリキュラム 43回(講師58名) 受講者506名
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved.
Slide # Groovy基礎勉強会 Copyright(C) 2013 NTT Software Corporation All rights reserved.4
講師紹介
上原潤二(@uehaj)
NTTソフトウェア株式会社Grails推進室
JGGUG(日本Grails/Groovyユーザグループ)運営委員
書籍執筆:
プログラミングGROOVY(技術評論社)
Grails徹底入門(翔泳社)
ブログ「Grな日々」
GroovyServ, LispBuilder,
GVM(Groovy JVM),
groovy-comprehension,
groovyz
Staticalizer開発者
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved.
準備1: Eclipseのインストール
• Eclipseインストール
– https://eclipse.org/downloads/
• Groovy-Eclipseプラグインをインストール
– [Help]->[Install new software]
• http://dist.springsource.org/milestone/GRECLIPSE/e4.4/
– Groovyプロジェクトを新規作成するか、既存プロジェクトをGroovyプロジ
ェクトに変換
• もしくは、あらかじめGroovyプラグイン等が設定された状態にカ
スタマイズされたバージョンの配布パッケージ
GGTSを使用する(GGTS=Groovy Grails Tool Suite)
– http://spring.io/tools/ggtsからダウンロード
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved.
Groovy単体でのインストール方法
• GVM Tool
– Linux, MacOSXでおすすめ
– Posh GVMというWindows Powershell版もあるが、利用
が少し難しい(?)
• Windows Installer
– Windowsではおすすめだが今は微妙なところにある
• https://bintray.com/groovy/Distributions/Windows-
Installer/groovy-2.4.3-installer/view#files
• 詳しくは
– http://www.groovy-lang.org/download.html
6
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 7
Groovyとは
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 8
Groovyとは
• Java VM上で動作する動的なスクリプト言語
– 構文はJavaとほぼ上位互換
– プラットフォームやセキュリティモデルは全く同じ
• OSSとして開発
– 主要開発者はPivotal社(SpringSource部門)に所属
• ユニークな特徴
– Javaと共存・併用するための言語
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 9
Groovyについて識者の言
• GroovyプロジェクトリードGuillaume Laforge氏
– GroovyはJavaを置き換えようとして発想されたのではないことを
思い出そう。Groovyは、Javaの補完であり、付属物であり、拡
張なんだ。これが、この言語とこのプロジェクトの、中核価値なん
だ。
• Grails/GroovyコアコミッターGraeme Rocher氏
「GroovyはJavaに取って代わるだろう」という記事に
対してコメント:
– 面白い記事だけど、GrailsとGroovyコアコミッターとしてしては、
同意できないね。;-) Groovyは来年には世界で使われている
top10言語の一つ、ひょっとしたら5位に迫るかもしれないけど、
(Javaを)置き換えるだって?ノーだ。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 10
コード例: HelloWorld.java __
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 11
コード例: HelloWorld.groovy
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 12
コード例: HelloWorld.groovy
println "Hello world"
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 13
Groovyの特徴
簡潔 Javaとの親和性
柔軟高機能
• Java技術者がすぐに習得できる
• 既存のJava資産・製品(ツールやミド
ルウェア)を使い続けられる
• Javaシステムでも利用可能
• 動的言語
• 言語自身をカスタマイズするDSL
• 本研修では対象外とする
• 多機能であり、生産性が高い
• Javaより進化が速く、いち早く先進的
な機能が取り込まれている
• Java比で1/4~1/10程度のコード量
• プログラムが小さくなることで、修正時
の依存性やバグの減少効果も見込む
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 14
簡潔
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 15
コード例:Java
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 16
コード例:Groovy!
ポイント: 正しいJavaコー
ドは一般に正しいGroovy
コードでもある。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 17
よりGroovyなコード
ポイント:import文、クラス定義、セミ
コロンなど多くを省略可
ポイント: java.net.Socketクラスや
java.io.*Streamクラスに自動closeなど
の便利機能が追加されたメソッド
(eachLine,
withStreams)が追加されている(GDK)
ポイント:プロパティアクセス記法
(.bytes)はgetter(getBytes())を呼び
出す
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 18
HTTPに限れば
JavaからGroovyに書き直すと、
大抵数分の1程度(1/4~)。
マップリテラル、リストリテラルなど
もコードが短くなる要因として良く示
される。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 19
簡潔に記述が可能
• import宣言(java.lang,io,net,util,..)
• 例外宣言/try-catch
• クラス定義、main
• セミコロン
• 型指定
• 引数の括弧(ブロックのトップレベルでのメソッド
呼び出しのみ)
• その他
–メソッド末尾の”return”
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 20
短さの意味
• 「短かいこと」が重要なのではない
– 「短くて分かりにくい」こともある
• 重要なのは「やりたい事(what)/コード量」のS/N比
– 短さは、「書きたいことを本来書くべきやり方で、書ける」を
達成するための1ファクター
• 「書きたいこと以外の雑事によってわずらわされない」
事が重要
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 21
Javaとの親和性
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 22
Javaと親和性が高い
• Java技術者がすぐに習得できる
– 教育コストが低い
– 静的型付け、動的型付けの使い分けが可能
• GroovyプログラムはJVMから見て通常のJava
プログラムに見えるため、Javaとの連携が自由
– 既存のJava資産・製品(ツールやミドルウェア)を使
い続けられる
– 蓄積してきたJava再利用部品を使いまわせる
– OSSVERT環境をそのままインフラとして利用できる
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved.
Groovyの実行の流れ
23
JVM
Javaソース
.classファイル
javacコマンド
javaコマンド
標準クラスローダ
Javaクラス
Groovyコード
groovyコマンド
Groovyクラスローダ
(オンメモリ実行時コンパイラ)
JavaクラスJavaクラス
.classファイル
groovycコマンド
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 24
GroovyとJavaの連携例
• GroovyのREPLでJavaライブラリを試す
– GroovyConsole、groovysh,..
• Java周辺ツール
– ビルド: Gradle、テスト: Spock,Geb
• フレームワーク
– Webアプリ開発: Grails
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 25
高機能
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 26
GDK (Groovy JDK)
• Java標準APIにGroovy処理系がメソッドを追加
• java.lang.Stringを例にとると、
– Java標準APIでは、65個のメソッド
– GDKでは、91個のメソッドを追加
• 便利なメソッド
– lsコマンドを実行(Processインスタンスが返る)
"ls".execute()
– trコマンドと同様の文字列置換(“ABCDEFG”が帰る)
"abcdefg".tr("a-z", "A-Z")
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 27
Groovyで追加されたメソッドの例
java.lang.String のメソッド Groovyでの動作
int count(String text) 文字列内のtextの出現回数をカウント
byte[] decodeBase64() Base64エンコード文字列をバイナリに変換
byte[] decodeHex() 16進文字列をバイナリに変換
Process execute() 文字列をコマンドとして実行
String expand(int tabStop) Tab文字をtabStopで指定された数のインデント
になるようスペースで置換する
boolean isDouble() Double型にパース可能かどうかを返す
String tr(String sourceSet,
String replacementSet)
sourceSetで指定された範囲の文字列を
replacementSetで指定された範囲の文字列に
置換する
String unexpand(int tabStop) 連続したスペースをTab文字に置換しtabStopで
指定された数のインデントにする
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 28
GDKリファレンス
http://groovy.codehaus.org/groovy-jdk/
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 29
クロージャ
• コンテキストを持ったコードブロック(コード断片)
• Javaの「無名内部クラス」に近い機能
– 無名内部クラス
Runnable r = new Runnable(){
public void run() {
System.out.println("hello");
}
};
– Groovyのクロージャ
Closure c = { println "hello" }
• 「クロージャを引数に取るメソッド」による処理
但し、Javaの内部クラ
スにおける「非finalな
ローカル変数にはアク
セスできない」という制
約は無いので、より高
機能である
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 30
Groovyプログラムの実行
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 31
Groovyの主な実行方法
• groovy コマンド
• groovyc コンパイラ
• groovysh コマンド
• groovyConsole コマンド
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 32
groovyコマンド
• 単体スクリプトを起動する普通の起動方法
• groovyプログラムファイル名を引数にして起
動する(拡張子省略可能)
• ごく短いコード(ワンライナー)を試すには –e
• コマンドライン引数(args)を与えることができ
る。
– WindowsではPATHEXT環境変数を設定したり、
UNIXではスクリプト1行目に#!env groovyという
shebang行を書くことでgroovyコマンドの明示的な実
行指定を省略できる
$ groovy -e ‘println new URL(“http://~”).text’
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 33
groovycコマンド(AOTコンパイラ)
• GroovyプログラムをJavaクラスファイル
(.class)にコンパイルできる
• groovyコードが普通のJavaクラスとなる
• mainが定義されていればjavaコマンドで実行
可能
–但し実行にはクラスパスに
$GROOVY_HOME/embeddable/groovy-
all-*.jarが必要。
$ groovyc test.groovy #  test.classが生成される
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 34
groovyshコマンド
• 対話的にGroovyコードを実行(REPL)
• (注意)ローカル変数(int x=…)は行を越えて
利用できないためバインディング変数を使う
(x=…)
• Grailsでは以下が同等
$ grails shell
$ groovysh
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 35
groovyConsoleコマンド
• Swing GUIで対話的にGroovyコードを実行
– 保存もできる。Undoもできる。
– Ctrl+Rで実行
– Ctrl+Wで出力クリア
• (注意)argsを指定できない
• Grailsでは以下が同等機能
• GGTS/Eclipseでは右クリック[実行]-
[GroovyConsole]で起動
– [Run as]-[Groovy Console]
$ grails console
$ groovyConsole
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 36
演習
• GGTS/Eclipseから groovyConsole を
起動し、以下を実行してみる
println 1+1
(1..10).each{println it}
• ctrl-Rで実行
• ctrl-Wで出力結果の消去
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 37
groovyConsole補足 (1)
• ライブラリの動作確認に便利なGrape
@Grab(group='~', module='~', version='~')
Mavenリポジトリを利用した依存関係の解決
(要Proxy設定)
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 38
groovyConsole補足 (2)
• Proxy設定(単独起動する場合)
環境変数 JAVA_OPTS に以下を設定する
-DproxyHost=proxy.hogehoge.co.jp
-DproxyPort=18080
※ 一行で書く
※ Tomcat や JBoss もこの環境変数を参照
するため注意すること
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 39
groovyConsole補足 (3)
• Proxy設定(Eclipse/GGTSから使う場合)
[実行]→[実行構成] で [Groovy Console] を
選択し、引数タブのVM引数に以下を加える。
-DproxyHost=proxy.hogehoge.co.jp
-DproxyPort=8080
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 40
Groovyの便利な機能
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 41
セーフナビゲーション
• ピリオドで繋いでフィールドやプロパティ、メソッド呼び出
しを連ねていくとき:
a.b.c()
• フィールドやプロパティの値、メソッド呼び出しの結果が
nullである場合を考慮すると以下のようになる。
if (a != null && a.b != null) {
a.b.c()
}
• ピリオド(.)の代わりに?.を使用すると、各参照がnullの
ときは式全体の値がnullになる
(NullPointerExceptionが発生しない)。
a?.b?.c()
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 42
Groovyの真偽値型
•boolean型以外でも真偽値判定に使
用できる
if ("ABC") { … }
•そのとき、以下の値が偽と判定される
null, 0, "", [], [:], …
参考: プログラミングGroovy p61
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 43
assert
• Groovyのassert文には以下の特長がある
– 常に有効である
↔Javaの場合、-eaオプションを指定しないと有効にならない
– assert失敗時のメッセージがとても親切である。
テストでは積極的に使うべき
| Failure: testSomething(test.TestTests)
| Assertion failed:
assert user.save() != null
| | |
| null false
test20120412.User : null
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 44
Groovyでの「長さ」取得
型 Javaでの取得方法 Groovyでの取得方法
配列 length フィールド size() メソッド
String length() メソッド size() メソッド
StringBuilder length() メソッド size() メソッド
StringBuffer length() メソッド size() メソッド
Collection size() メソッド size() メソッド
Map size() メソッド size() メソッド
File length() メソッド size() メソッド
Matcher groupCount() メソッド size() メソッド
size()さえ覚えておけば良い!
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 45
Groovyの注意点
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 46
Groovyの注意点(1)
• 変数は宣言する必要がある
a = 3 // ×
int a = 3 // ○
def a = 3 // ○
「スクリプト」におけるバ
インディング変数の場合
は例外。「プログラミング
Groovy」p45バインディ
ング変数 参照
Object a = 3と同様
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 47
Groovyの注意点(2)
• 型チェックは実行時に行なわれる
String s = 3 // 実行時にキャスト例外
–このコードは実行しないとエラーにならない。
(このコードを含むメソッドが呼び出されない
限りエラーにならない)
–Javaで例えると以下のようなイメージ
Object tmp = new Integer(3)
String s = (String)tmp
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 48
Groovyの注意点(3)
• 変数や関数の戻り値・引数の型指定はした方が
良い?
def foo(a,b,c)
String bar(String a, List b, Map c)
型指定の利点: IDEでの補完、実行時型チェッ
ク、ドキュメントの役に立つ
• 一概には言えないが、業務開発では型指定をす
べきでないケースを除いて基本的に指定した方
が良い
– 型指定することで柔軟性が損なわれる場合は型指定しない
– Grailsのドメインクラスではフィールドの型指定が必須
– プリミティブ型の配列では型指定が必須
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 49
Groovyの注意点(4)
•Groovyにおける同値判定
値の比較 インスタンスが同じ
かどうか
Groovy ==
(もしくはequals()でも良
い。==はequalsの別名)
Object#is()
Java equals() ==
Groovyでは文字列比較に==を使える
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 50
Groovy演習
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 51
準備:Eclipse/GGTSの設定
• 行番号の表示
–[window]-[設定]-[一般]-[エディター]-[テキ
スト・エディター]の[行番号の表示]
• 空白文字の表示(お好みで)
–同、[空白文字の表示]
• 保存時にセミコロンを除去(お好みで)
–[window]-[設定]-[Groovy]-[Formatter]-
[remove unneccessary semicolons]
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved.
文字コードの設定
• Windowsではtext file encoding
UTF-8に設定
(Windows上のEcipseの
デフォルトがMS932なので)
52
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 53
Groovy演習の説明(1)
• Groovy_Operation
プロジェクトをGGTSに
インポートする
– [ファイル]-[インポート]-
[Git/Project From Git]-
[Clone URL]
– 以下を入力
• https://github.com/ueh
aj/groovy-
bootcamp2015
– Master/answerの両方をチェック
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 54
Groovy演習の説明(2)
課題:未完成の本体クラスと、それらに対応するテストクラスを所与
とする。これらのテストコードがすべてパスするように本体クラス
を完成せよ。
本体クラス テストクラス
未完成なのでこれらを修正して完成させる。 これらは修正しないこと。
Groovy_Operation
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 55
Groovy演習の説明(3)
• Package Explorerからsrc/test(もしくは個々
のテストクラス・テストメソッド)を選択し、右クリッ
ク-[Run As]-[JUnit Test]
この状態にすれば完了。
※「テストクラスが見つからない」エラーになる場合はクリーンして再ビルド。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 56
Groovy演習の説明(4)
本体クラス(StringOperation)
@Test
void "文字列の長さを取得する"() {
assert cut.method2("abcdef") == 6
assert cut.method2("") == 0
}
/**
* 引数に与えた文字列strの長さを返す。
*/
def method2(String str) {
// TBD
}
テストクラス(StringOperationTest)
このテストが合格するように・・・
(assertの式がtrueになるように…)
この本体メソッドを実装する(課題)
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 57
Groovy演習の説明(5)
• String操作(StringOperation)
• Closure操作(ClosureOperation)
• List操作(ListOperation)
• Map操作(MapOperation)
• Collection操作(CollectionOperation)
• その他(OtherOperation)
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 58
演習について
• わからなければanswerブランチの回答を見て進めて
下さい。
– src/main配下のGroovyファイルで、右クリック、
[compareWith]-[Branch, tag or..]-[Remote Tracking]-
[origin/answer]
• 書籍「プログラミングGroovy」およびGDKリファレンス
も参照して進めて下さい。
– http://groovy.codehaus.org/groovy-jdk/
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 59
Groovyの文字列操作
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 60
GString
•ダブルクォートで括られた文字列中で、
$変数名、${式}の記法は変数や式
の値に置換される。
a = "ABC"
c = 7
"$a$c${c*2}" == "ABC714"
参考: プログラミングGroovy p67
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 61
Groovyの文字列定数
記法 複数行可能か? 文字'¥'の扱い $,${}の展開
(GString)
”ABCDE” 単一行 エスケープ文字 行う
’ABCDE’ 単一行 エスケープ文字 行わない
/ABCDE/ 単一行 エスケープ文字として
扱わない
行う
””” ABCE
EFG ”””
複数行 エスケープ文字 行う
’’’ ABCD
EFG ’’’
複数行 エスケープ文字 行わない
$/ABCE
EFG/$
複数行 エスケープ文字として
扱わない
行う
Groovyに「文字型定数」はない。使うとしたら ’a’ as char や (char)’a’ の
ように文字列から強制変換を行う。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 62
演習: String操作(StringOperation)
• StringOperationクラスのメソッドを定義し、
StringOperationTestのテストメソッドがすべて
PASSするようにせよ。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 63
クロージャ
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 64
クロージャとは
• コンテキストを持ったコードブロック(コード断片)
• Javaの「無名内部クラス」に近い機能
– 無名内部クラス
Runnable r = new Runnable(){
public void run() {
System.out.println("hello");
}
};
– Groovyのクロージャ
Closure c = { println "hello" }
• eachやcollectなど、「クロージャを引数に取る
メソッド」があり、柔軟な処理が可能。
但し、Javaの内部クラ
スにおける「非finalな
ローカル変数にはアク
セスできない」という制
約は無いので、より高
機能である
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 65
クロージャの定義と呼び出し
• クロージャリテラル { .. } をコード中に書くこと
でクロージャが生成される。書いただけでは実
行されない(遅延評価)
c = { println ”ABC” }
• .call()したときに実行される
c = {println ”ABC” }
c.call()
• .call()の代りに()でも実行される
c = {println ”ABC” }
c()
ABC
ABC
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 66
クロージャの引数と返り値
• クロージャは引数をとることができ、先頭で
{ 引数リスト -> .. }という形で記述する
{a,b,c -> println "$a,$b,$c"}.call(1,2,3)
• 引数リストを書かない場合、暗黙引数「it」を1つ
取るとみなされる
c = { println it }
c.call("hello")
• クロージャは値を返す
c = { it * 2 }
println c.call(3)
1,2,3
hello
6
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 67
演習: クロージャ操作(ClosureOperation)
• ClosureOperationクラスのメソッドを定義し、
ClosureOperationTestのテストメソッドがすべ
てPASSするようにせよ。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 68
Groovyのリスト操作
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 69
リストリテラル
• 角括弧中にカンマ区切りで要素を並べる
def a = [1,2,3,”四”]
println a.class
• 空リスト
a = [ ]
• as演算子でSetに変換
def s = [1,2,3] as Set
println s.class
class java.util.ArrayList
class java.util.LinkedHashSet
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 70
リストの要素アクセス
a = [1,2,3,4]
a.getAt(1) == 2
a[1] == 2
a[-1] == 4
a[2..3] == [3,4]
a[3,2,1] == [4,3,2]
a[3,1..3] == [4,2,3,4]
a[-1..0] == [4,3,2,1]
負の数は末尾からの逆方向インデックス。範囲(1..3)
や、カンマで区切った複数インデックスで指定すると、
対応する要素群のリストを返す。
a.putAt(1, xxx)
a[1] = xxx
a[-1] = xxx
a[2..3] = xxx
a[3,2,1] = xxx
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 71
リストの全要素処理
List lst = [ 'a', 'b', 'c' ]
lst.each{
println it
}
lst.eachWithIndex{ it,idx ->
println "$idx: $it"
}
lst.reverseEach { it ->
println it
}
a
b
c
0:a
1:b
2:c
c
b
a
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 72
演習: リスト操作(ListOperation)
• ListOperationクラスのメソッドを定義し、
ListOperationTestのテストメソッドがすべて
PASSするようにせよ。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 73
Groovyのマップ操作
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 74
マップリテラル
• 中括弧中にカンマ区切りで「キー:値」を並べる
def m = [ 'age':35, '名前':"山田太郎" ]
println m.getClass()
• キーのクォートは識別子であれば省略できる
m = [ age:35, 名前:"山田太郎", '1番好き':"ケーキ" ]
• キーが文字列ではないマップ
m = [ 7: "ラッキー", 4: "クッキー", (2+3): "アンラッキー" ]
• 空のマップ
m = [:]
class java.util.LinkedHashMap
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 75
マップの要素アクセス
形式 例 特徴
メソッド形式 map.get(key)
map.put(key,value)
Javaと同じ
配列形式 map['a']
map[key]
キーが変数や式のとき
シンプル
プロパティ形式 map.a
map."$key"
キーが文字列定数の
ときシンプル
クォート可能
GStringと併用可
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 76
マップの全要素処理
Map m = [a:1, b:2, c:3]
• 1引数クロージャ(エントリが
得られる)
m.each {
println it.key
prntln it.value
}
• 2引数クロージャ(key,value
が得られる)
m.each { key, value ->
println key
println value
}
• エントリの集合
println m.entrySet()
• キーの集合
println m.keySet()
• 値の集合
println m.values()
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 77
演習: マップ操作(MapOperation)
• MapOperationクラスのメソッドを定義し、
MapOperationTestのテストメソッドがすべて
PASSするようにせよ。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 78
Groovyのコレクション操作
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 79
主なコレクション操作
• 繰り返し操作
– each/reverseEach
– eachWithIndex
• リスト操作
– reverse
– push/pop
– join
• マップ操作
– each
– entrySet
– keySet/values
• クエリ系
– collect/grep
– find/findAll
– max/min
– any/every
• 集合操作
– contains/in
– groupBy
– flatten
– intersect/disjoint
– combinations
– transpose
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 80
List#each(Closure)
• クロージャ(ブロック)を引数にとり、クロージャに
それぞれの要素を与えて呼び出す(要素回数だ
け繰り返して呼び出す。要素の値がクロージャ
引数として与えられる)
クロージャ引数
1
2
3
[1, 2, 3].each {
println it
}
[1, 2, 3].each { item ->
println item
} 1
2
3
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 81
List#collect(Closure)
• 引数のクロージャ(ブロック)にそれぞれの要素
を与えて呼び出していく。それぞれの呼び出し
の結果をリストとして返す。
[2, 4, 6]
[1, 2, 3].collect {
it * 2
}
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 82
演習: コレクション操作(CollectionOperation)
• CollectionOperationクラスのメソッドを定義し、
CollectionOperationTestのテストメソッドがす
べてPASSするようにせよ。
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 83
その他
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 84
暗黙のコンストラクタ
• 明示的にコンストラクタを定義しない場合、
暗黙にMapを引数として取る以下のような
コンストラクタが内部的に生成・利用される。
class Person {
int age
String name
Person(Map m) {
this.age = m.age
this.name = m.name
}
}
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 85
名前引数によるメソッド呼び出し
• マップを引数にとるメソッドを呼び出す場合、
「キー:値」の形式で順不同に引数を与えること
ができる。
def method(Map m) {
assert m.foo == 1
assert m.bar == 2
}
method( foo: 1, bar: 2 )
method( bar: 2, foo: 1 )
NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 86
演習: その他の操作(OtherOperation)
• OtherOperationクラスのメソッドを定義し、
OtherOperationTestのテストメソッドがすべて
PASSするようにせよ。

More Related Content

What's hot

Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ckIndy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ckUehara Junji
 
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901Uehara Junji
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるKoichi Sakata
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Uehara Junji
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summerenterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 SummerUehara Junji
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方Yoshifumi Kawai
 
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*WorkshopNew feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*WorkshopUehara Junji
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to ObjectsYoshifumi Kawai
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
SignalRブートキャンプ
SignalRブートキャンプSignalRブートキャンプ
SignalRブートキャンプKouji Matsui
 
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
 

What's hot (20)

Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ckIndy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
 
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
Groovyの紹介20130323
Groovyの紹介20130323Groovyの紹介20130323
Groovyの紹介20130323
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summerenterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summer
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*WorkshopNew feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*Workshop
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
SignalRブートキャンプ
SignalRブートキャンプSignalRブートキャンプ
SignalRブートキャンプ
 
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
 

Similar to Groovy Bootcamp 2015 by JGGUG

GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうGraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうKoichi Sakata
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみようTakuya Azumi
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようcch-robo
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...NTT DATA Technology & Innovation
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)NTT DATA Technology & Innovation
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験AdvancedTechNight
 
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiTizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiNaruto TAKAHASHI
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門cch-robo
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMFAtomu Hidaka
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in DartGoro Fuji
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングRansui Iso
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)tamtam180
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMFAtomu Hidaka
 

Similar to Groovy Bootcamp 2015 by JGGUG (20)

GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうGraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみよう
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiTizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native api
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in Dart
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 

More from Uehara Junji

Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Uehara Junji
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Uehara Junji
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsUehara Junji
 
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
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能についてUehara Junji
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Uehara Junji
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Uehara Junji
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEUehara Junji
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Uehara Junji
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming LanguageUehara Junji
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyUehara Junji
 
G*WS 3rd Lightning talk
G*WS 3rd Lightning talkG*WS 3rd Lightning talk
G*WS 3rd Lightning talkUehara Junji
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And FutureUehara Junji
 
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Uehara Junji
 
Groovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftGroovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftUehara Junji
 

More from Uehara Junji (17)

Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
 
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
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能について
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
 
Clojure
ClojureClojure
Clojure
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming Language
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
 
Lisp Builder
Lisp BuilderLisp Builder
Lisp Builder
 
G*WS 3rd Lightning talk
G*WS 3rd Lightning talkG*WS 3rd Lightning talk
G*WS 3rd Lightning talk
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And Future
 
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)
 
Groovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftGroovy Conference2008 Nttsoft
Groovy Conference2008 Nttsoft
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
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
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介: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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介: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
 
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
 
論文紹介: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
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (10)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
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」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介: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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介: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
 
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
 
論文紹介: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...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

Groovy Bootcamp 2015 by JGGUG

  • 1. JGGUG / NTTソフト道場 共催 今だから始めよう Groovyブートキャンプ2015夏 2015/08/07
  • 2. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 準備 •演習マテリアル、準備などはこちらか ら –https://github.com/uehaj/groovy- bootcamp2015 2
  • 3. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 3 NTTソフト道場のご紹介 実務経験豊富な当社プロフェッショナル社員の実践経験から得られたノウハウを研 修カリキュラムとしてご提供します Jenkins Android Grails/Groovy モダンWebデザイン OSSVERT・Web3層構築仮想化 テストツール NW構築 SW 運用管理セグメント SW eth0 eth3 bond0 eth2 xen1/dom0 eth0 eth0 eth0 eth0 eth2 eth1 eth1 eth2 eth1 eth2 eth1 eth2 eth3eth0 bond0 WEB xen2/dom0 eth0 eth0 eth0 eth0 eth2eth1 eth1 eth2 eth1 eth2 eth1 xenbr4xenbr3 xenbr4 xenbr1 xenbr3 xenbr1 外部ネットワークSW外部セグメント xenbr0xenbr2 xenbr0xenbr2 tag10 tag30 tag20 tag10 tag30 tag20 物理サーバ1 物理サーバ2 WEB AP AP DB DB Apache Web ServerApache Web Server Ultra Monkey Heartbeat PREX CentOS5.5 OSS・DB レガシーコード改善 セキュリティ 開発言語・フレームワーク IPv6 開発テクニック インフラ構築 ストレージ CSS3 6年間で2000名以上の人材育成実績 H21年度 9カリキュラム 17回(講師10名) 受講者143名 H22年度 14カリキュラム 24回(講師16名) 受講者299名 H23年度 23カリキュラム 36回(講師23名) 受講者394名 H24年度 27カリキュラム 55回(講師47名) 受講者597名 H25年度 21カリキュラム 25回(講師50名) 受講者323名 H26年度 32カリキュラム 43回(講師58名) 受講者506名
  • 4. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. Slide # Groovy基礎勉強会 Copyright(C) 2013 NTT Software Corporation All rights reserved.4 講師紹介 上原潤二(@uehaj) NTTソフトウェア株式会社Grails推進室 JGGUG(日本Grails/Groovyユーザグループ)運営委員 書籍執筆: プログラミングGROOVY(技術評論社) Grails徹底入門(翔泳社) ブログ「Grな日々」 GroovyServ, LispBuilder, GVM(Groovy JVM), groovy-comprehension, groovyz Staticalizer開発者
  • 5. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 準備1: Eclipseのインストール • Eclipseインストール – https://eclipse.org/downloads/ • Groovy-Eclipseプラグインをインストール – [Help]->[Install new software] • http://dist.springsource.org/milestone/GRECLIPSE/e4.4/ – Groovyプロジェクトを新規作成するか、既存プロジェクトをGroovyプロジ ェクトに変換 • もしくは、あらかじめGroovyプラグイン等が設定された状態にカ スタマイズされたバージョンの配布パッケージ GGTSを使用する(GGTS=Groovy Grails Tool Suite) – http://spring.io/tools/ggtsからダウンロード
  • 6. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. Groovy単体でのインストール方法 • GVM Tool – Linux, MacOSXでおすすめ – Posh GVMというWindows Powershell版もあるが、利用 が少し難しい(?) • Windows Installer – Windowsではおすすめだが今は微妙なところにある • https://bintray.com/groovy/Distributions/Windows- Installer/groovy-2.4.3-installer/view#files • 詳しくは – http://www.groovy-lang.org/download.html 6
  • 7. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 7 Groovyとは
  • 8. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 8 Groovyとは • Java VM上で動作する動的なスクリプト言語 – 構文はJavaとほぼ上位互換 – プラットフォームやセキュリティモデルは全く同じ • OSSとして開発 – 主要開発者はPivotal社(SpringSource部門)に所属 • ユニークな特徴 – Javaと共存・併用するための言語
  • 9. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 9 Groovyについて識者の言 • GroovyプロジェクトリードGuillaume Laforge氏 – GroovyはJavaを置き換えようとして発想されたのではないことを 思い出そう。Groovyは、Javaの補完であり、付属物であり、拡 張なんだ。これが、この言語とこのプロジェクトの、中核価値なん だ。 • Grails/GroovyコアコミッターGraeme Rocher氏 「GroovyはJavaに取って代わるだろう」という記事に 対してコメント: – 面白い記事だけど、GrailsとGroovyコアコミッターとしてしては、 同意できないね。;-) Groovyは来年には世界で使われている top10言語の一つ、ひょっとしたら5位に迫るかもしれないけど、 (Javaを)置き換えるだって?ノーだ。
  • 10. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 10 コード例: HelloWorld.java __ public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world"); } }
  • 11. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 11 コード例: HelloWorld.groovy public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world"); } }
  • 12. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 12 コード例: HelloWorld.groovy println "Hello world"
  • 13. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 13 Groovyの特徴 簡潔 Javaとの親和性 柔軟高機能 • Java技術者がすぐに習得できる • 既存のJava資産・製品(ツールやミド ルウェア)を使い続けられる • Javaシステムでも利用可能 • 動的言語 • 言語自身をカスタマイズするDSL • 本研修では対象外とする • 多機能であり、生産性が高い • Javaより進化が速く、いち早く先進的 な機能が取り込まれている • Java比で1/4~1/10程度のコード量 • プログラムが小さくなることで、修正時 の依存性やバグの減少効果も見込む
  • 14. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 14 簡潔
  • 15. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 15 コード例:Java
  • 16. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 16 コード例:Groovy! ポイント: 正しいJavaコー ドは一般に正しいGroovy コードでもある。
  • 17. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 17 よりGroovyなコード ポイント:import文、クラス定義、セミ コロンなど多くを省略可 ポイント: java.net.Socketクラスや java.io.*Streamクラスに自動closeなど の便利機能が追加されたメソッド (eachLine, withStreams)が追加されている(GDK) ポイント:プロパティアクセス記法 (.bytes)はgetter(getBytes())を呼び 出す
  • 18. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 18 HTTPに限れば JavaからGroovyに書き直すと、 大抵数分の1程度(1/4~)。 マップリテラル、リストリテラルなど もコードが短くなる要因として良く示 される。
  • 19. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 19 簡潔に記述が可能 • import宣言(java.lang,io,net,util,..) • 例外宣言/try-catch • クラス定義、main • セミコロン • 型指定 • 引数の括弧(ブロックのトップレベルでのメソッド 呼び出しのみ) • その他 –メソッド末尾の”return”
  • 20. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 20 短さの意味 • 「短かいこと」が重要なのではない – 「短くて分かりにくい」こともある • 重要なのは「やりたい事(what)/コード量」のS/N比 – 短さは、「書きたいことを本来書くべきやり方で、書ける」を 達成するための1ファクター • 「書きたいこと以外の雑事によってわずらわされない」 事が重要
  • 21. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 21 Javaとの親和性
  • 22. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 22 Javaと親和性が高い • Java技術者がすぐに習得できる – 教育コストが低い – 静的型付け、動的型付けの使い分けが可能 • GroovyプログラムはJVMから見て通常のJava プログラムに見えるため、Javaとの連携が自由 – 既存のJava資産・製品(ツールやミドルウェア)を使 い続けられる – 蓄積してきたJava再利用部品を使いまわせる – OSSVERT環境をそのままインフラとして利用できる
  • 23. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. Groovyの実行の流れ 23 JVM Javaソース .classファイル javacコマンド javaコマンド 標準クラスローダ Javaクラス Groovyコード groovyコマンド Groovyクラスローダ (オンメモリ実行時コンパイラ) JavaクラスJavaクラス .classファイル groovycコマンド
  • 24. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 24 GroovyとJavaの連携例 • GroovyのREPLでJavaライブラリを試す – GroovyConsole、groovysh,.. • Java周辺ツール – ビルド: Gradle、テスト: Spock,Geb • フレームワーク – Webアプリ開発: Grails
  • 25. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 25 高機能
  • 26. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 26 GDK (Groovy JDK) • Java標準APIにGroovy処理系がメソッドを追加 • java.lang.Stringを例にとると、 – Java標準APIでは、65個のメソッド – GDKでは、91個のメソッドを追加 • 便利なメソッド – lsコマンドを実行(Processインスタンスが返る) "ls".execute() – trコマンドと同様の文字列置換(“ABCDEFG”が帰る) "abcdefg".tr("a-z", "A-Z")
  • 27. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 27 Groovyで追加されたメソッドの例 java.lang.String のメソッド Groovyでの動作 int count(String text) 文字列内のtextの出現回数をカウント byte[] decodeBase64() Base64エンコード文字列をバイナリに変換 byte[] decodeHex() 16進文字列をバイナリに変換 Process execute() 文字列をコマンドとして実行 String expand(int tabStop) Tab文字をtabStopで指定された数のインデント になるようスペースで置換する boolean isDouble() Double型にパース可能かどうかを返す String tr(String sourceSet, String replacementSet) sourceSetで指定された範囲の文字列を replacementSetで指定された範囲の文字列に 置換する String unexpand(int tabStop) 連続したスペースをTab文字に置換しtabStopで 指定された数のインデントにする
  • 28. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 28 GDKリファレンス http://groovy.codehaus.org/groovy-jdk/
  • 29. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 29 クロージャ • コンテキストを持ったコードブロック(コード断片) • Javaの「無名内部クラス」に近い機能 – 無名内部クラス Runnable r = new Runnable(){ public void run() { System.out.println("hello"); } }; – Groovyのクロージャ Closure c = { println "hello" } • 「クロージャを引数に取るメソッド」による処理 但し、Javaの内部クラ スにおける「非finalな ローカル変数にはアク セスできない」という制 約は無いので、より高 機能である
  • 30. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 30 Groovyプログラムの実行
  • 31. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 31 Groovyの主な実行方法 • groovy コマンド • groovyc コンパイラ • groovysh コマンド • groovyConsole コマンド
  • 32. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 32 groovyコマンド • 単体スクリプトを起動する普通の起動方法 • groovyプログラムファイル名を引数にして起 動する(拡張子省略可能) • ごく短いコード(ワンライナー)を試すには –e • コマンドライン引数(args)を与えることができ る。 – WindowsではPATHEXT環境変数を設定したり、 UNIXではスクリプト1行目に#!env groovyという shebang行を書くことでgroovyコマンドの明示的な実 行指定を省略できる $ groovy -e ‘println new URL(“http://~”).text’
  • 33. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 33 groovycコマンド(AOTコンパイラ) • GroovyプログラムをJavaクラスファイル (.class)にコンパイルできる • groovyコードが普通のJavaクラスとなる • mainが定義されていればjavaコマンドで実行 可能 –但し実行にはクラスパスに $GROOVY_HOME/embeddable/groovy- all-*.jarが必要。 $ groovyc test.groovy #  test.classが生成される
  • 34. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 34 groovyshコマンド • 対話的にGroovyコードを実行(REPL) • (注意)ローカル変数(int x=…)は行を越えて 利用できないためバインディング変数を使う (x=…) • Grailsでは以下が同等 $ grails shell $ groovysh
  • 35. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 35 groovyConsoleコマンド • Swing GUIで対話的にGroovyコードを実行 – 保存もできる。Undoもできる。 – Ctrl+Rで実行 – Ctrl+Wで出力クリア • (注意)argsを指定できない • Grailsでは以下が同等機能 • GGTS/Eclipseでは右クリック[実行]- [GroovyConsole]で起動 – [Run as]-[Groovy Console] $ grails console $ groovyConsole
  • 36. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 36 演習 • GGTS/Eclipseから groovyConsole を 起動し、以下を実行してみる println 1+1 (1..10).each{println it} • ctrl-Rで実行 • ctrl-Wで出力結果の消去
  • 37. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 37 groovyConsole補足 (1) • ライブラリの動作確認に便利なGrape @Grab(group='~', module='~', version='~') Mavenリポジトリを利用した依存関係の解決 (要Proxy設定)
  • 38. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 38 groovyConsole補足 (2) • Proxy設定(単独起動する場合) 環境変数 JAVA_OPTS に以下を設定する -DproxyHost=proxy.hogehoge.co.jp -DproxyPort=18080 ※ 一行で書く ※ Tomcat や JBoss もこの環境変数を参照 するため注意すること
  • 39. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 39 groovyConsole補足 (3) • Proxy設定(Eclipse/GGTSから使う場合) [実行]→[実行構成] で [Groovy Console] を 選択し、引数タブのVM引数に以下を加える。 -DproxyHost=proxy.hogehoge.co.jp -DproxyPort=8080
  • 40. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 40 Groovyの便利な機能
  • 41. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 41 セーフナビゲーション • ピリオドで繋いでフィールドやプロパティ、メソッド呼び出 しを連ねていくとき: a.b.c() • フィールドやプロパティの値、メソッド呼び出しの結果が nullである場合を考慮すると以下のようになる。 if (a != null && a.b != null) { a.b.c() } • ピリオド(.)の代わりに?.を使用すると、各参照がnullの ときは式全体の値がnullになる (NullPointerExceptionが発生しない)。 a?.b?.c()
  • 42. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 42 Groovyの真偽値型 •boolean型以外でも真偽値判定に使 用できる if ("ABC") { … } •そのとき、以下の値が偽と判定される null, 0, "", [], [:], … 参考: プログラミングGroovy p61
  • 43. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 43 assert • Groovyのassert文には以下の特長がある – 常に有効である ↔Javaの場合、-eaオプションを指定しないと有効にならない – assert失敗時のメッセージがとても親切である。 テストでは積極的に使うべき | Failure: testSomething(test.TestTests) | Assertion failed: assert user.save() != null | | | | null false test20120412.User : null
  • 44. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 44 Groovyでの「長さ」取得 型 Javaでの取得方法 Groovyでの取得方法 配列 length フィールド size() メソッド String length() メソッド size() メソッド StringBuilder length() メソッド size() メソッド StringBuffer length() メソッド size() メソッド Collection size() メソッド size() メソッド Map size() メソッド size() メソッド File length() メソッド size() メソッド Matcher groupCount() メソッド size() メソッド size()さえ覚えておけば良い!
  • 45. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 45 Groovyの注意点
  • 46. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 46 Groovyの注意点(1) • 変数は宣言する必要がある a = 3 // × int a = 3 // ○ def a = 3 // ○ 「スクリプト」におけるバ インディング変数の場合 は例外。「プログラミング Groovy」p45バインディ ング変数 参照 Object a = 3と同様
  • 47. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 47 Groovyの注意点(2) • 型チェックは実行時に行なわれる String s = 3 // 実行時にキャスト例外 –このコードは実行しないとエラーにならない。 (このコードを含むメソッドが呼び出されない 限りエラーにならない) –Javaで例えると以下のようなイメージ Object tmp = new Integer(3) String s = (String)tmp
  • 48. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 48 Groovyの注意点(3) • 変数や関数の戻り値・引数の型指定はした方が 良い? def foo(a,b,c) String bar(String a, List b, Map c) 型指定の利点: IDEでの補完、実行時型チェッ ク、ドキュメントの役に立つ • 一概には言えないが、業務開発では型指定をす べきでないケースを除いて基本的に指定した方 が良い – 型指定することで柔軟性が損なわれる場合は型指定しない – Grailsのドメインクラスではフィールドの型指定が必須 – プリミティブ型の配列では型指定が必須
  • 49. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 49 Groovyの注意点(4) •Groovyにおける同値判定 値の比較 インスタンスが同じ かどうか Groovy == (もしくはequals()でも良 い。==はequalsの別名) Object#is() Java equals() == Groovyでは文字列比較に==を使える
  • 50. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 50 Groovy演習
  • 51. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 51 準備:Eclipse/GGTSの設定 • 行番号の表示 –[window]-[設定]-[一般]-[エディター]-[テキ スト・エディター]の[行番号の表示] • 空白文字の表示(お好みで) –同、[空白文字の表示] • 保存時にセミコロンを除去(お好みで) –[window]-[設定]-[Groovy]-[Formatter]- [remove unneccessary semicolons]
  • 52. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 文字コードの設定 • Windowsではtext file encoding UTF-8に設定 (Windows上のEcipseの デフォルトがMS932なので) 52
  • 53. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 53 Groovy演習の説明(1) • Groovy_Operation プロジェクトをGGTSに インポートする – [ファイル]-[インポート]- [Git/Project From Git]- [Clone URL] – 以下を入力 • https://github.com/ueh aj/groovy- bootcamp2015 – Master/answerの両方をチェック
  • 54. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 54 Groovy演習の説明(2) 課題:未完成の本体クラスと、それらに対応するテストクラスを所与 とする。これらのテストコードがすべてパスするように本体クラス を完成せよ。 本体クラス テストクラス 未完成なのでこれらを修正して完成させる。 これらは修正しないこと。 Groovy_Operation
  • 55. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 55 Groovy演習の説明(3) • Package Explorerからsrc/test(もしくは個々 のテストクラス・テストメソッド)を選択し、右クリッ ク-[Run As]-[JUnit Test] この状態にすれば完了。 ※「テストクラスが見つからない」エラーになる場合はクリーンして再ビルド。
  • 56. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 56 Groovy演習の説明(4) 本体クラス(StringOperation) @Test void "文字列の長さを取得する"() { assert cut.method2("abcdef") == 6 assert cut.method2("") == 0 } /** * 引数に与えた文字列strの長さを返す。 */ def method2(String str) { // TBD } テストクラス(StringOperationTest) このテストが合格するように・・・ (assertの式がtrueになるように…) この本体メソッドを実装する(課題)
  • 57. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 57 Groovy演習の説明(5) • String操作(StringOperation) • Closure操作(ClosureOperation) • List操作(ListOperation) • Map操作(MapOperation) • Collection操作(CollectionOperation) • その他(OtherOperation)
  • 58. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 58 演習について • わからなければanswerブランチの回答を見て進めて 下さい。 – src/main配下のGroovyファイルで、右クリック、 [compareWith]-[Branch, tag or..]-[Remote Tracking]- [origin/answer] • 書籍「プログラミングGroovy」およびGDKリファレンス も参照して進めて下さい。 – http://groovy.codehaus.org/groovy-jdk/
  • 59. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 59 Groovyの文字列操作
  • 60. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 60 GString •ダブルクォートで括られた文字列中で、 $変数名、${式}の記法は変数や式 の値に置換される。 a = "ABC" c = 7 "$a$c${c*2}" == "ABC714" 参考: プログラミングGroovy p67
  • 61. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 61 Groovyの文字列定数 記法 複数行可能か? 文字'¥'の扱い $,${}の展開 (GString) ”ABCDE” 単一行 エスケープ文字 行う ’ABCDE’ 単一行 エスケープ文字 行わない /ABCDE/ 単一行 エスケープ文字として 扱わない 行う ””” ABCE EFG ””” 複数行 エスケープ文字 行う ’’’ ABCD EFG ’’’ 複数行 エスケープ文字 行わない $/ABCE EFG/$ 複数行 エスケープ文字として 扱わない 行う Groovyに「文字型定数」はない。使うとしたら ’a’ as char や (char)’a’ の ように文字列から強制変換を行う。
  • 62. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 62 演習: String操作(StringOperation) • StringOperationクラスのメソッドを定義し、 StringOperationTestのテストメソッドがすべて PASSするようにせよ。
  • 63. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 63 クロージャ
  • 64. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 64 クロージャとは • コンテキストを持ったコードブロック(コード断片) • Javaの「無名内部クラス」に近い機能 – 無名内部クラス Runnable r = new Runnable(){ public void run() { System.out.println("hello"); } }; – Groovyのクロージャ Closure c = { println "hello" } • eachやcollectなど、「クロージャを引数に取る メソッド」があり、柔軟な処理が可能。 但し、Javaの内部クラ スにおける「非finalな ローカル変数にはアク セスできない」という制 約は無いので、より高 機能である
  • 65. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 65 クロージャの定義と呼び出し • クロージャリテラル { .. } をコード中に書くこと でクロージャが生成される。書いただけでは実 行されない(遅延評価) c = { println ”ABC” } • .call()したときに実行される c = {println ”ABC” } c.call() • .call()の代りに()でも実行される c = {println ”ABC” } c() ABC ABC
  • 66. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 66 クロージャの引数と返り値 • クロージャは引数をとることができ、先頭で { 引数リスト -> .. }という形で記述する {a,b,c -> println "$a,$b,$c"}.call(1,2,3) • 引数リストを書かない場合、暗黙引数「it」を1つ 取るとみなされる c = { println it } c.call("hello") • クロージャは値を返す c = { it * 2 } println c.call(3) 1,2,3 hello 6
  • 67. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 67 演習: クロージャ操作(ClosureOperation) • ClosureOperationクラスのメソッドを定義し、 ClosureOperationTestのテストメソッドがすべ てPASSするようにせよ。
  • 68. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 68 Groovyのリスト操作
  • 69. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 69 リストリテラル • 角括弧中にカンマ区切りで要素を並べる def a = [1,2,3,”四”] println a.class • 空リスト a = [ ] • as演算子でSetに変換 def s = [1,2,3] as Set println s.class class java.util.ArrayList class java.util.LinkedHashSet
  • 70. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 70 リストの要素アクセス a = [1,2,3,4] a.getAt(1) == 2 a[1] == 2 a[-1] == 4 a[2..3] == [3,4] a[3,2,1] == [4,3,2] a[3,1..3] == [4,2,3,4] a[-1..0] == [4,3,2,1] 負の数は末尾からの逆方向インデックス。範囲(1..3) や、カンマで区切った複数インデックスで指定すると、 対応する要素群のリストを返す。 a.putAt(1, xxx) a[1] = xxx a[-1] = xxx a[2..3] = xxx a[3,2,1] = xxx
  • 71. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 71 リストの全要素処理 List lst = [ 'a', 'b', 'c' ] lst.each{ println it } lst.eachWithIndex{ it,idx -> println "$idx: $it" } lst.reverseEach { it -> println it } a b c 0:a 1:b 2:c c b a
  • 72. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 72 演習: リスト操作(ListOperation) • ListOperationクラスのメソッドを定義し、 ListOperationTestのテストメソッドがすべて PASSするようにせよ。
  • 73. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 73 Groovyのマップ操作
  • 74. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 74 マップリテラル • 中括弧中にカンマ区切りで「キー:値」を並べる def m = [ 'age':35, '名前':"山田太郎" ] println m.getClass() • キーのクォートは識別子であれば省略できる m = [ age:35, 名前:"山田太郎", '1番好き':"ケーキ" ] • キーが文字列ではないマップ m = [ 7: "ラッキー", 4: "クッキー", (2+3): "アンラッキー" ] • 空のマップ m = [:] class java.util.LinkedHashMap
  • 75. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 75 マップの要素アクセス 形式 例 特徴 メソッド形式 map.get(key) map.put(key,value) Javaと同じ 配列形式 map['a'] map[key] キーが変数や式のとき シンプル プロパティ形式 map.a map."$key" キーが文字列定数の ときシンプル クォート可能 GStringと併用可
  • 76. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 76 マップの全要素処理 Map m = [a:1, b:2, c:3] • 1引数クロージャ(エントリが 得られる) m.each { println it.key prntln it.value } • 2引数クロージャ(key,value が得られる) m.each { key, value -> println key println value } • エントリの集合 println m.entrySet() • キーの集合 println m.keySet() • 値の集合 println m.values()
  • 77. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 77 演習: マップ操作(MapOperation) • MapOperationクラスのメソッドを定義し、 MapOperationTestのテストメソッドがすべて PASSするようにせよ。
  • 78. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 78 Groovyのコレクション操作
  • 79. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 79 主なコレクション操作 • 繰り返し操作 – each/reverseEach – eachWithIndex • リスト操作 – reverse – push/pop – join • マップ操作 – each – entrySet – keySet/values • クエリ系 – collect/grep – find/findAll – max/min – any/every • 集合操作 – contains/in – groupBy – flatten – intersect/disjoint – combinations – transpose
  • 80. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 80 List#each(Closure) • クロージャ(ブロック)を引数にとり、クロージャに それぞれの要素を与えて呼び出す(要素回数だ け繰り返して呼び出す。要素の値がクロージャ 引数として与えられる) クロージャ引数 1 2 3 [1, 2, 3].each { println it } [1, 2, 3].each { item -> println item } 1 2 3
  • 81. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 81 List#collect(Closure) • 引数のクロージャ(ブロック)にそれぞれの要素 を与えて呼び出していく。それぞれの呼び出し の結果をリストとして返す。 [2, 4, 6] [1, 2, 3].collect { it * 2 }
  • 82. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 82 演習: コレクション操作(CollectionOperation) • CollectionOperationクラスのメソッドを定義し、 CollectionOperationTestのテストメソッドがす べてPASSするようにせよ。
  • 83. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 83 その他
  • 84. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 84 暗黙のコンストラクタ • 明示的にコンストラクタを定義しない場合、 暗黙にMapを引数として取る以下のような コンストラクタが内部的に生成・利用される。 class Person { int age String name Person(Map m) { this.age = m.age this.name = m.name } }
  • 85. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 85 名前引数によるメソッド呼び出し • マップを引数にとるメソッドを呼び出す場合、 「キー:値」の形式で順不同に引数を与えること ができる。 def method(Map m) { assert m.foo == 1 assert m.bar == 2 } method( foo: 1, bar: 2 ) method( bar: 2, foo: 1 )
  • 86. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 86 演習: その他の操作(OtherOperation) • OtherOperationクラスのメソッドを定義し、 OtherOperationTestのテストメソッドがすべて PASSするようにせよ。