狠狠撸

狠狠撸Share a Scribd company logo
?開発現場で使えるかもしれない?
Groovyの入門
Java Doでしょう#04
2月13日
自己紹介
? @zgmf_mbfp03
? フォローは非推奨
? サバゲー, 酒大好き
はじめに
? Groovyに触れてまだ4ヶ月たってないです
? まだ入門中です
? 温かい目で見守ってください Groovyわかないお
アジェンダ
? Groovyとは
? 環境構築
? 入門
? 利用用途
? まとめ
Groovyとはなんぞや
? Java VMで動いちゃう動的型付け言語
? J2SE1.4以上で動作
? Javaとの高い親和性が!
? JavaのAPIやライブラリを簡単に使用可能
? Rubyに強い影響を受けているから似た文法が多いらしい
? 私はRubyを知らない???
JDKについて
? 要求はこんな感じ
参考: http://www.groovy-lang.org/download.html
Indy(InvokeDynamic)はJVMに追加された新しいバイトコードと、その処理の仕組みを総称する呼び方らしい???
私は全く理解していない!
Groovyの環境構築
? Macでの設定 (Windowsは… 知らないから調べてね!)
? ターミナルを立ち上げ
? $brew install groovy
? これだけ
? 確認
? $ groovy –version
? $Groovy Version: 2.4.5 JVM: 1.8.x Vendor: Oracle Corporation OS:
Mac OS X
Groovy-Eclipse
? EclipseでGroovyを扱う
? groovy-all-x.x.x.jar追加
Javaとの差
? セミコロンを省略
? return を省略
? throws宣言を省略
? 例外処理
? 形宣言を省略
? プリミティブ型はラッパー型
? リテラルが異なる
? アクセス修飾子
? メソッド呼び出し
? 演算子のオーバーロード
? クロージャ
? Etc…
HelloWorld
? JavaでHello World!
HelloWorld
? JavaでHello World!
? これをGroovy化!
? 拡張子を *.java から *.groovy に
? セミコロンを省略
? System.out.println が println に
? カッコを省略
? スクリプト形式に
HelloWorld
セミコロンを省略
? セミコロンを省略
return を省略
? return を省略
? 最後の評価された値が返却される
例外処理
? 例外処理
? throwsを省略
? catchのクラスを省略
? Exception扱い
形宣言を省略
? 形宣言を省略
? defは、JavaでいうObject型
? 形无しは、迟丑颈蝉が示すオブジェクトの笔谤辞辫别谤迟测
プリミティブ型はラッパー型
? プリミティブ型はラッパー型
? ラッパー型になるが 苍耻濒濒の代入は実行时にエラー
リテラルが異なる1
? リテラルが異なる
? 浮動小数の計算が正確
? ${…} を書くと
GString扱い
? GStringは${…}の中に
書かれたものに置換
リテラルが異なる2
? リテラルが異なる
? []を書くだけでList扱い
? + や - で要素の追加、削除が可能
? 演算時のオーバーロード
? 他のコレクションにする場合は
as で強制変換
? Mapは連想配列風とプロパティ風
の扱い方が有る
アクセス修飾子
? アクセス修飾子
? Private? そんなものは無視
? アクセス可能
? 無印はPublic扱い
? パッケージプライベートはないわけではない
メソッド呼び出し1
? メソッド呼び出し
? メソッド名はStringまたはGStringで書ける
? 引数は初期化できる
メソッド呼び出し2
? メソッド呼び出し
? コンストラクタはデフォルトだけでいい
? アクセサメソッドはいらない
? 裏でsetter, getter をいい感じに呼んでいるらしい
演算子のオーバーロード
? 演算子のオーバーロード
? 演算子は、それに対応するメソッドが存在している
クロージャ
? クロージャ
クロージャ
? クロージャ(Groovy)
参照 http://www.groovy-lang.org/closures.html
英語読めないお(??ω?`)
クロージャ
? クロージャ(Groovy)
? 第一級関数であり、メソッドとは区別される
? 引数を取り、値を返し、内部で宣言された変数を参照し、使う
ことができるコードの集まり
? コードブロックやメソッドポインタのようなもの
入門なんだから
クロージャ実装
? 定義と実行
匿名クラス
? Java
? Groovy
コレクション操作
? Java8 - StreamAPI forEach, sorted, map
? Groovy - Closure each, sort, collect
Groovy からStreamAPI
? StreamAPIを使うことも可能
? ラムダ式ではなくクロージャになる
JavaからGroovyクラスの利用
? JavaからGroovyのクラスを問題なく利用できる
? クラスの利用
? スクリプトの実行
JavaからGroovyの実行
GroovyShell
? GroovyShellクラス
? 簡単なGroovyの実行に便利
? Binding バインド変数の設定
? GroovyShell#evaluate
? 戻り値がスクリプトの結果
JavaからGroovyの実行
GroovyScriptEngine
? GroovyScriptEngineクラス
? ディレクトリ指定でGroovyスクリプトを実行
? GroovyScriptEngine#run
? 戻り値がスクリプトの結果
Groovyの利用
? ビルド
? Gradle
? テスト
? Spock
? Geb
? メインの言語
? Grails
? Spring
? Android
? その他
? XMLパース
? HTML, XMLの出力
? HTMLスクレイピング
? RDBMSの操作
? Excelの操作
まとめ
? Groovyは, Javaとの親和性が高い動的型付け言語
? スクリプトとして実行が可能
? Javaよりも適当に書ける
? JavaからGroovyを呼び出せる
? Groovyを使ったツールやライブラリも有る
番外編 – Spockの紹介 ?
Groovy製のテストツール Spock
? テストフレームワーク
? Groovy製でJUnit上に構築されたもの
? PowerAssertで細かいエラー情報を出力
? BDD的なテストコード記述
? 標準でMockAPI使用可能
? データドリブンテストの記述が可能
PowerAssert
? JUnit
? Spock
Spockでの記述方法
? テストクラスはGroovyクラス
? テストクラスは Specification を継承する
? メソッドには @Unroll を付ける(データドリブンテスト)
? ブロックに分けて記述
ブロックについて
Mockの使用方法
? Setup(Given)ブロックに記述
? Mockでモックの定義
? >>で振る舞い定義
? クラス名.metaClass.setAttribute(インスタンス, フィールド
名, 新しい値)でフィールド変更
Spockまとめ
? JUnitより結果がわかりやすい
? BDD的な記述により、処理がわかりやすい
? 标準で惭辞肠办础笔滨があり、楽????

More Related Content

开発现场て?使えるかもしれない骋谤辞辞惫测