Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Groovy Bootcamp 2015 by JGGUG

Groovy Bootcamp Handson slide

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

Groovy Bootcamp 2015 by JGGUG

  1. 1. JGGUG / NTTソフト道場 共催 今だから始めよう Groovyブートキャンプ2015夏 2015/08/07
  2. 2. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 準備 •演習マテリアル、準備などはこちらか ら –https://github.com/uehaj/groovy- bootcamp2015 2
  3. 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. 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. 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. 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. 7. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 7 Groovyとは
  8. 8. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 8 Groovyとは • Java VM上で動作する動的なスクリプト言語 – 構文はJavaとほぼ上位互換 – プラットフォームやセキュリティモデルは全く同じ • OSSとして開発 – 主要開発者はPivotal社(SpringSource部門)に所属 • ユニークな特徴 – Javaと共存・併用するための言語
  9. 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. 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. 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. 12. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 12 コード例: HelloWorld.groovy println "Hello world"
  13. 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. 14. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 14 簡潔
  15. 15. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 15 コード例:Java
  16. 16. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 16 コード例:Groovy! ポイント: 正しいJavaコー ドは一般に正しいGroovy コードでもある。
  17. 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. 18. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 18 HTTPに限れば JavaからGroovyに書き直すと、 大抵数分の1程度(1/4~)。 マップリテラル、リストリテラルなど もコードが短くなる要因として良く示 される。
  19. 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. 20. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 20 短さの意味 • 「短かいこと」が重要なのではない – 「短くて分かりにくい」こともある • 重要なのは「やりたい事(what)/コード量」のS/N比 – 短さは、「書きたいことを本来書くべきやり方で、書ける」を 達成するための1ファクター • 「書きたいこと以外の雑事によってわずらわされない」 事が重要
  21. 21. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 21 Javaとの親和性
  22. 22. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 22 Javaと親和性が高い • Java技術者がすぐに習得できる – 教育コストが低い – 静的型付け、動的型付けの使い分けが可能 • GroovyプログラムはJVMから見て通常のJava プログラムに見えるため、Javaとの連携が自由 – 既存のJava資産・製品(ツールやミドルウェア)を使 い続けられる – 蓄積してきたJava再利用部品を使いまわせる – OSSVERT環境をそのままインフラとして利用できる
  23. 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. 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. 25. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 25 高機能
  26. 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. 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. 28. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 28 GDKリファレンス http://groovy.codehaus.org/groovy-jdk/
  29. 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. 30. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 30 Groovyプログラムの実行
  31. 31. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 31 Groovyの主な実行方法 • groovy コマンド • groovyc コンパイラ • groovysh コマンド • groovyConsole コマンド
  32. 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. 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. 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. 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. 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. 37. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 37 groovyConsole補足 (1) • ライブラリの動作確認に便利なGrape @Grab(group='~', module='~', version='~') Mavenリポジトリを利用した依存関係の解決 (要Proxy設定)
  38. 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. 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. 40. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 40 Groovyの便利な機能
  41. 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. 42. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 42 Groovyの真偽値型 •boolean型以外でも真偽値判定に使 用できる if ("ABC") { … } •そのとき、以下の値が偽と判定される null, 0, "", [], [:], … 参考: プログラミングGroovy p61
  43. 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. 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. 45. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 45 Groovyの注意点
  46. 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. 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. 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. 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. 50. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 50 Groovy演習
  51. 51. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 51 準備:Eclipse/GGTSの設定 • 行番号の表示 –[window]-[設定]-[一般]-[エディター]-[テキ スト・エディター]の[行番号の表示] • 空白文字の表示(お好みで) –同、[空白文字の表示] • 保存時にセミコロンを除去(お好みで) –[window]-[設定]-[Groovy]-[Formatter]- [remove unneccessary semicolons]
  52. 52. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 文字コードの設定 • Windowsではtext file encoding UTF-8に設定 (Windows上のEcipseの デフォルトがMS932なので) 52
  53. 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. 54. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 54 Groovy演習の説明(2) 課題:未完成の本体クラスと、それらに対応するテストクラスを所与 とする。これらのテストコードがすべてパスするように本体クラス を完成せよ。 本体クラス テストクラス 未完成なのでこれらを修正して完成させる。 これらは修正しないこと。 Groovy_Operation
  55. 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. 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. 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. 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. 59. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 59 Groovyの文字列操作
  60. 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. 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. 62. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 62 演習: String操作(StringOperation) • StringOperationクラスのメソッドを定義し、 StringOperationTestのテストメソッドがすべて PASSするようにせよ。
  63. 63. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 63 クロージャ
  64. 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. 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. 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. 67. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 67 演習: クロージャ操作(ClosureOperation) • ClosureOperationクラスのメソッドを定義し、 ClosureOperationTestのテストメソッドがすべ てPASSするようにせよ。
  68. 68. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 68 Groovyのリスト操作
  69. 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. 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. 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. 72. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 72 演習: リスト操作(ListOperation) • ListOperationクラスのメソッドを定義し、 ListOperationTestのテストメソッドがすべて PASSするようにせよ。
  73. 73. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 73 Groovyのマップ操作
  74. 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. 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. 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. 77. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 77 演習: マップ操作(MapOperation) • MapOperationクラスのメソッドを定義し、 MapOperationTestのテストメソッドがすべて PASSするようにせよ。
  78. 78. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 78 Groovyのコレクション操作
  79. 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. 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. 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. 82. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 82 演習: コレクション操作(CollectionOperation) • CollectionOperationクラスのメソッドを定義し、 CollectionOperationTestのテストメソッドがす べてPASSするようにせよ。
  83. 83. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2015 NTT Software Corporation. All rights reserved. 83 その他
  84. 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. 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. 86. NTTソフト道場研修Grails/Groovy入門Copyright (C) 2013 NTT Software Corporation. All rights reserved. 86 演習: その他の操作(OtherOperation) • OtherOperationクラスのメソッドを定義し、 OtherOperationTestのテストメソッドがすべて PASSするようにせよ。

×