Looking for groovy Answers? Try Ask4KnowledgeBase
Looking for groovy Keywords? Try Ask4Keywords

groovygroovyの使い方


備考

Groovyは

  • Java Virtual Machineのためのオプションの型付き動的言語です。

  • Javaの強みを基盤にしていますが、Python、Ruby、Smalltalkなどの言語に触発されています。

  • Java開発者が近代的なプログラミング機能を利用できるようにします。

  • コードを静的にチェックし、静的にコンパイルして堅牢性とパフォーマンスを向上させる機能を提供します

  • ドメイン固有の言語やその他のコンパクトな構文をサポートしているため、コードを読みやすく保守しやすい

  • 強力な処理プリミティブ、OOアビリティ、Ant DSLを使用してシェルを作成し、スクリプトを簡単に作成できます

  • Web、GUI、データベース、またはコンソールアプリケーションの開発時に足場コードを削減することで、開発者の生産性を向上

  • 単体テストをサポートし、すぐに使えるようにしてテストを簡素化

  • 既存のすべてのJavaクラスおよびライブラリとシームレスに統合

  • Javaバイトコードに直接コンパイルするので、どこでもJavaを使用できます。

バージョン

こんにちは世界

Groovy版のHello Worldです。

println 'Hello World!'
 

こんにちは。

次の例は、スクリプトを使ってhelloWorld.groovy もっとも簡単なHello World 示しています。ファイルに次のコードスニペットをhelloWorld.groovy ます。たとえば、 helloWorld.groovy

println 'Hello World!'
 

実行方法:コマンドラインで、 groovy helloWorld.groovy

出力: Hello World!

こんにちは世界Shebang(linux)

コンテンツを持つhello.groovyファイルを指定すると:

#!/usr/bin/env groovy
println "Hello world"
 

指定された実行権限がある場合、コマンドラインから実行できます。

$ ./hello.groovy
 

インストールまたはセットアップ

Groovyをインストールする一般的な方法は2つあります。

ダウンロード

Groovyバイナリは、GroovyのWebサイトのダウンロードページからダウンロードできます。アーカイブを解凍し、 %GROOVY_HOME%/bin/groovy.bat へのパスをPATHシステム環境変数に追加できます。%GROOVY_HOME%はGroovyがアンパックされているディレクトリです。

SDKMAN

もう1つの方法は、 SDKMANを使用することです 。このオプションは急速に普及し、Groovyの複数のバージョンを非常に簡単に管理できます。また、「GR8」エコスペース内の他のアプリケーションもサポートしています。このオプションは、LinuxとMacではネイティブに動作しますが 、WindowsではCygwinが必要です。

Groovyのダウンロードページの指示に従って、SDKMANをインストールするには次の手順を実行します。

$ curl -s get.sdkman.io | bash

SDKMANがインストールされると、 sdk コマンドにアクセスできるようになりました。このコマンドを使うと、多くの便利なことができます。

Groovyをインストールする

$ sdk install groovy

これにより、Groovyの最新バージョンがインストールされます。

Groovyのバージョンのリスト

$ sdk ls groovy

これにより、GroovyソフトウェアでLinuxスタイルのls コマンドを実行し、使用可能なすべてのオプションをリストします。インストールされている各バージョンの横に* があり、現在のバージョンを示す> があります。

Groovyのバージョンを切り替える

$ sdk use groovy 2.4.7

これにより、Groovyの現在のバージョンが2.4.7に変更されます。他のバージョンがインストールされている場合は、それらのバージョンに切り替えることができます。

Groovyの現在のバージョンをgroovy -version コマンドで表示することができgroovy -version

ポーズ-gvm

SDKMANの初期名はGVM、 posh-gvmはWindows PowershellのGVMポートです。したがって、Windowsマシン上で開発し、Cygwin上でSDKMANを使用したくない場合は、posh-gvmが役に立ちます。これはSDKMANと同じように動作しますが、 sdk 代わりにコマンドはgmv です。そう

PS C:\Users\You> gmv install groovy
 

Windowsマシン上でposh-gvmを通してgroovyをインストールします。

JavaプロジェクトでのGroovyの使用

GroovyはすべてのJavaクラスにアクセスできますが、GroovyクラスはJavaクラスであり、JVMによって直接実行できます。 Javaプロジェクトで作業している場合、単純なスクリプト言語としてGroovyを使用してJavaコードと対話するのは簡単です。

もっと良いものにするために、ほぼすべてのJavaクラスを.groovyに名前変更してコンパイルして実行することができます.GroovyはJavaのスーパーセットに近く、これはgroovyの明白な目標です。

GroovyにはREPLがあります。 groovysh はGroovyが付属しており、クラスパスが正しく設定されていれば、Javaクラスのインスタンス化とテストを迅速に行うことができます。例えば、あなたのclasspath があなたのEclipse "classes / bin"ディレクトリを指していたら、あなたのファイルをeclipseで保存し、 groovysh にジャンプしてクラスをインスタンス化してテストすることができます。

GroovyをJavaの代わりに使用する理由は次のとおりです。クラスローダーは、コンパイル時に新しいクラスを取り上げる際には威力を発揮します。一般的に、開発中にgroovysh を終了/再起動する必要はありません。

構文はTERSEです。メンテナンス可能なコードではこれは素晴らしいことではありませんが、スクリプトやテストではコードを大幅に削減することができます。それが行う大きなことの1つは、チェックされた例外を取り除くことです(または、より正確には、チェックされたすべての例外をチェックされていない例外にすることです)。これは次のようなコードになります(1秒後にhelloを表示)。

class JavaClass {
    public static void main(String[] args) {
        try {
            Thread.sleep(1000);
        } catch(InterruptedException e) {
            // You shouldn't leave an empty catch block, but who cares if this was interrupted???
        }
        System.out.println("Hello!");
    }
}
 

Groovyに入れる:

Thread.sleep(1000)
print "Hello!"
 

Groovyには、非常にタイトな初期化構文もあります。これにより、データを気にせずに好きなように指定することができます。

Javaでマップを初期化するには、おそらく次のようなことを行うべきです:

String[] init = { "1:Bill", "2:Doug", "3:Bev" };
// Note the rest of this can be put in a function and reused or maybe found in a library, but I always seem to have to write this function!
Map m = new HashMap<Integer, String>();
for(String pair : int) {
    String[] split = pair.split(":");
    m.put(new Integer(split[0]), split[1])
}
 

これは悪くないが、それは維持するために他にもある。グルーヴィーでは、次のように使います:

Map map = { 1 : "Bill", 2 : "Doug", 3 : "Bev" }
 

そして、あなたは完了です。リストの構文も簡単です。

もう一つの大きな利点は、groovyのクロージャ構文です。それは驚くほど簡潔で楽しく、維持するのがいくらか難しいが、重要ではないスクリプトのために。たとえば、現在のディレクトリに「 Hello という単語が含まれている.txt ファイルをすべて見つけるためのコードです。

println new File('.').files.findAll{ it.name.endsWith('.txt') && it.text.contains('Hello') }.collect{ it.name }
 

この例では、いくつかの "Groovy"トリックを使用します。

  • .filesgetFiles() メソッドを参照します - groovyはgetter / setterとプロパティ構文をgetFiles() 切り替えることができます

  • it. 反復の現在の要素を参照します。 { it }{ it -> it } ショートカットです。例:

    [1、2、3] .collect {it ^ 2} == [1,4,9]

  • it.text (ここで、 it ファイルである)メソッドのグルーヴィーを使用するために追加File 、ファイルのテキスト全体を検索します。これはスクリプトに驚くほど役立ちます。

インベントリを使ってCSV文字列を作成する

Groovyでは、inject()メソッドは、inject()メソッドを実装するすべてのオブジェクトに新しい機能を追加(または注入)できる累積メソッドの1つです。 Collectionの場合、オブジェクトのコレクションにクロージャを一様に適用し、その結果を単一の値に照合することができます。 inject()メソッドの最初のパラメータは累積の初期値で、2番目のパラメータはクロージャです。

この例では、List of Stringsをパラメータとして取り、コンマで区切られた文字列の値を出力します。この機能を使用して、RESTクエリ文字列に値のリストを追加しました。少し変更した場合は、IN句の一部としてSQL文に値を含めるために使用しました。これを行うコードは次のとおりです:

public String convertToCSV( List<String> list ) {
    if (list == null) {
        return ""
    }
    return list.inject( '' ) { result, item ->
        result + ( result && item ? ',' : '' ) + ( item ? "${item.trim()}" : '' )
    }
}

assert convertToCSV( null ) == ""
assert convertToCSV( ["aaa", "bbb  ", null, "  ccc  "] ) == "aaa,bbb,ccc" 
 

この例では、inject()メソッドの最初のパラメータは長さゼロの文字列です。つまり、リストの最初の要素を処理するときに、結果もゼロ長の文字列になります。これは、文字列の先頭にコンマをつけない理由である最初の3次評価ではfalseになります。リストの要素を連続して反復するたびに、リスト内の最後の項目に到達するまで、結果はコンマ、コンマ、次に次の項目の連結になります。

この方法の利点は、連結されたString結果を保持するために、ループ構造外の変数を必要としないことです。これは、コードに副作用が生じる可能性があることを意味します。 inject()アプローチでは、この振る舞いが注入され、コールの結果がコレクションによって閉じられます。このアプローチの欠点は読みやすさです。しかし、いくつかの経験をすると、読みやすく理解しやすくなり、この例がその目標を達成するのに役立つことを願っています。