SlideShare a Scribd company logo
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

PDF
Groovy Shell Scripting 2015
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PDF
New features of Groovy 2.0 and 2.1
PDF
Use JWT access-token on Grails REST API
PDF
Markup Template Engine introduced Groovy 2.3
PDF
Introduce Groovy 2.3 trait
PDF
GroovyServ concept, how to use and outline.
PDF
groovy 2.1.0 20130118
Groovy Shell Scripting 2015
Java開発の強力な相棒として今すぐ使えるGroovy
New features of Groovy 2.0 and 2.1
Use JWT access-token on Grails REST API
Markup Template Engine introduced Groovy 2.3
Introduce Groovy 2.3 trait
GroovyServ concept, how to use and outline.
groovy 2.1.0 20130118

What's hot (19)

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

Similar to Groovy Bootcamp 2015 by JGGUG (20)

PDF
Groovy kisobenkyoukai20130309
PPT
G*workshop sendai 20100424(v2)
PDF
Grailsのススメ(仮)
PDF
G * magazine 0
PDF
G* Workshop in Fukuoka - Introduction
PDF
明日から使えるgradle
PDF
Groovyでjson
PDF
「プログラミングGroovy」入門(公開用)
PDF
The History of Groovy #GroovyBase
PDF
簡単!Groovy入門
KEY
Aizu lt tokyo_luxion
PDF
Groovy Grails eXchage 2014 報告
PDF
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
PDF
Groovyで楽にSQLを実行してみよう
PPTX
今から始めるApache Groovy
PPTX
開発を彩る技術たち
PDF
JJUG CCC 20150411 grails3 Spring-boot
PDF
Gradle a new Generation Build Tool
PPTX
2013.01.18 G*Workshop GGX 2012 Report
PPTX
開発現場で使えるかもしれないGroovy
Groovy kisobenkyoukai20130309
G*workshop sendai 20100424(v2)
Grailsのススメ(仮)
G * magazine 0
G* Workshop in Fukuoka - Introduction
明日から使えるgradle
Groovyでjson
「プログラミングGroovy」入門(公開用)
The History of Groovy #GroovyBase
簡単!Groovy入門
Aizu lt tokyo_luxion
Groovy Grails eXchage 2014 報告
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Groovyで楽にSQLを実行してみよう
今から始めるApache Groovy
開発を彩る技術たち
JJUG CCC 20150411 grails3 Spring-boot
Gradle a new Generation Build Tool
2013.01.18 G*Workshop GGX 2012 Report
開発現場で使えるかもしれないGroovy
Ad

More from Uehara Junji (16)

PDF
Shibuya JVM Groovy 20150418
KEY
JJUG CCC 2012 Real World Groovy/Grails
PDF
Java x Groovy: improve your java development life
KEY
Groovy 1.8の新機能について
PDF
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
KEY
Jggug ws 15th LT 20110224
PDF
Easy Going Groovy 2nd season on DevLOVE
PDF
Easy Going Groovy(Groovyを気軽に使いこなそう)
PDF
Clojure
PDF
Groovy, Transforming Language
KEY
Jggug Nagoya 20090925 Groovy
PDF
Lisp Builder
PDF
G*WS 3rd Lightning talk
PDF
Groovy Now And Future
PDF
Seasar Conference2008 Grails(Final)
PPT
Groovy Conference2008 Nttsoft
Shibuya JVM Groovy 20150418
JJUG CCC 2012 Real World Groovy/Grails
Java x Groovy: improve your java development life
Groovy 1.8の新機能について
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Jggug ws 15th LT 20110224
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy(Groovyを気軽に使いこなそう)
Clojure
Groovy, Transforming Language
Jggug Nagoya 20090925 Groovy
Lisp Builder
G*WS 3rd Lightning talk
Groovy Now And Future
Seasar Conference2008 Grails(Final)
Groovy Conference2008 Nttsoft

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するようにせよ。