Groovyの紹介と使い方
- 導入
- Groovyの構文の特徴(Javaとの比較)
- を使用したJavaプロジェクトとのGroovy統合
- Groovyの実装に関する原則
- SpringによるGroovyと動的言語のサポート
- Groovy ランタイムサンドボックス
この記事はJane's Bookに掲載されたものです。 https://www.jianshu.com/p/2c6b95097b2c
紹介文
グルーヴィー は、Python、Ruby、Smalltalkの強力な機能の多くを組み合わせた、JVM上に構築された軽量かつ強力な動的言語です。
GroovyはJavaで書かれており、Groovyの文法はJavaの文法に似ています。GroovyのコードはJavaのコードとうまく動作し、既存のコードの拡張に使用できます。
使用方法
- Groovyコンソール
- IDEA groovyプラグインのインストール
アプリケーション
ElasticSearch、JenkinsともにGroovyスクリプトの実行をサポートしています。
プロジェクトビルドツールGradleはGroovyの実装です。
Groovyの構文の特徴(Javaとの比較)
-
セミコロン不要
-
return
キーワードを省略し、メソッドの最後の式を戻り値として返すこともできます(可読性を低下させないために適宜使用します)。 -
クラスのデフォルトのスコープは
public
ゲッター/セッターメソッドは必要ありません。 -
def
キーワードで定義された変数はすべてObject型で、任意の変数、メソッドを使用することができます。def
の定義/宣言で、Groovyでは「すべてはオブジェクトである」とされています。 -
ナビゲーション演算子 ( ?. ) は、オブジェクト参照が空でないときにのみ呼び出されるメソッドを実装するのに役立ちます。
// java if (object ! = null) { object.getFieldA(); } // groovy object?.getFieldA()
-
コマンド・チェイニングでは、Groovyではトップレベルのメソッド呼び出しにおいて、引数の周りの括弧を省略することができます。コマンドチェイニング機能は、この機能を拡張し、括弧を必要としないメソッド呼び出しを、引数の周りの括弧や、リンクされた呼び出し間のドットなしでチェイニングします。
def methodA(String name) { println("A: " + name) return this } def methodB(String name) { println("B: " + name) return this } def methodC() { println("C") return this } def methodD(String name) { println("D: " + name) return this } methodA("xiaoming") methodB("zhangsan") methodC() methodD("lisi") // brackets are needed in chains without parameters methodA "xiaoming" methodB "zhangsan" methodC() methodD "lisi"
-
クロージャ。クロージャは匿名の短いコードブロックです。それぞれのクロージャは groovy.lang.Closure クラスを継承したクラスにコンパイルされ、引数を渡してクロージャを呼び出す call というメソッドを持っています。
def hello = {println "Hello World"} hello.call() // Include formal parameters def hi = { person1, person2 -> println "hi " + person1 + ", "+ person2 } hi.call("xiaoming", "xiaoli") // implicit single argument, 'it' is a keyword in Groovy def hh = { println("haha, " + it) } hh.call("zhangsan")
-
シンタックスで、(クロージャの実装)
// Java public class JavaDeamo { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, Calendar.DECEMBER); calendar.set(Calendar.DATE, 4); calendar.set(Calendar.YEAR, 2018); Date time = calendar.getTime(); System.out.println(time); } } // Groovy Calendar calendar = Calendar.getInstance() calendar.with { // it refers to the calendar reference it.set(Calendar.MONTH, Calendar.DECEMBER) // you can omit it and use the command chain set Calendar.DATE, 4 set Calendar.YEAR, 2018 // calendar.getTime() println(getTime()) // omit get, for method names that start with get and println(time) }
-
データ構造のネイティブな構文で、より簡単に記述可能
def list = [11, 12, 13, 14] // list, default is ArrayList def list = ['Angular', 'Groovy', 'Java'] as List // list of strings // same as list.add(8) list << 8 [1, 2, [3, 4], 5] // Nested lists ['Groovy', 21, 2.11] // A heterogeneous list of object references [] // an empty list def set = ["22", "11", "22"] as Set // LinkedHashSet, as operator-converted type def map = ['TopicName': 'Lists', 'TopicName': 'Maps'] // map, LinkedHashMap [:] // empty map // loop map.each { print it.key }
-
グルーヴィー・トゥルース
のように、すべての型をブール値に変換することができます。
null
,
void
オブジェクトは、0 または null 値に相当し、次のように解決されます。
false
と同等であり、その他は
true
-
Groovyサポート
DSL (Domain Specific Languages)
DSLはGroovyで書かれたコードを単純化し、一般ユーザが理解しやすいように設計されています。コマンドチェーンでDSLを書く
// groovy code show = { println it } square_root = { Math.sqrt(it) } def please(action) { [the: { what -> [of: { n -> action(what(n)) }] }] } // DSL language: please show the square_root of 100 (please show the square root of 100) // call, equivalent to: please(show).the(square_root).of(100) please show the square_root of 100 // ==> 10.0
-
ジャワの
==
は、実はGroovyのis()
というメソッドがありますが、Groovy の==
は、より巧妙なequals()
. Groovy でオブジェクトへの参照を比較するために==
を使用するのではなくa.is(b)
を使用したJavaプロジェクトでのGroovyの統合
プロジェクトにgroovyの依存関係を導入する
org.codehaus.groovy
groovy-all
x.y.z
groovy.lang.Script
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例