11

私は、非常に単純な http ボット、どこかとの間でのデータの一括インポート/エクスポートなど、短いタスクにスクリプト言語を使用することを好みます...基本的な使い捨てスクリプトと単純なもの。要点は、スクリプト言語は簡単なプログラムを作成するための効率的なツールにすぎないということです。この時点でのGroovyの理解については...

Groovy でプログラミングする場合、簡単なスクリプトを書きたくない場合は、通常の Java 構文に戻らざるを得ないのではないでしょうか (スクリプト言語と比較して複雑になる可能性があることはわかっています)。もっと複雑なことをしますか?たとえば、http スクリプトを実行したい場合は、Java 構文を使用して Commons HttpClient を呼び出すだけでよいのではないでしょうか。私にとって、スクリプト言語のポイントは、迅速に型付けされ、無理のない構造を実現することです。もう 1 つ、優れた Java ライブラリがすでにたくさんある場合、Groovy ベースのライブラリを開発するインセンティブはないように思われます。

そのため、スクリプト言語として Groovy に切り替えるか、Perl、Python、Ruby などのより一般的なスクリプト言語を引き続き使用できるかどうかを考えています。

4

6 に答える 6

13

@Zombies、最近書いたスクリプトの簡単な例をお見せしましょう。

def fetch(build, toFile) {
    new FTPClient().with {
        connect ftpServer
        enterLocalPassiveMode()
        login ftpUser, ftpPassword
        changeWorkingDirectory "/var/staging/revision-${build}"
        fileType = FTPClient.BINARY_FILE_TYPE
        toFile.withOutputStream { ostream -> 
            retrieveFile "build-${build}.zip", ostream 
        }
        disconnect()
    }
}

commons-net API を使用していますが、同等の Java プログラムよりもはるかに明確な構文を持っていることに同意していただけると思います。したがって、Java API を使用しても、スクリプト言語を使用する目的が損なわれるとは思いません。さらに、Java API に関する既存の知識を活用するのに役立つため、非常に実用的なアプローチです。

于 2010-04-15T17:33:55.873 に答える
5

Groovy は、スクリプト作成に非常に便利です。最近、Maven の依存関係をディレクトリにフェッチするためのスクリプトが必要になりlib、グルーヴィーなスクリプトになってしまいました。このスニペットは pom を解析し、jar のリストを提供します。XML 解析にかなり適しています。

#!/usr/bin/env groovy
def pom = new XmlSlurper().parse('pom.xml')
def repo = "${System.env.HOME}/.m2/repository"

pom.dependencies.dependency.each { dep ->
    def jarName = "${dep.artifactId}-${dep.version}.jar"
    def groupPath = dep.groupId.text().replaceAll('\\.', '/')
    def jarPath = "${repo}/${groupPath}/${dep.artifactId}/${dep.version}"
    println "$jarPath/$jarName"
}
于 2010-04-15T21:07:19.857 に答える
5

Groovy の 1 つの目標は、Java との透過的な相互運用性を実現することです。Groovy は、「スクリプト機能を備えた Java 依存言語」として設計されています。ただし、これらの機能はマイナーではないと思います。Groovy には、静的プログラミング言語 (Java など) にはない多くの機能があります。

要約すると、Java をまったく気にしない場合は、Python や Perl などのより汎用的なスクリプト言語を使用してください。スクリプトのような方法で Java コードベースを使用したい場合は、Groovy が適しています。

于 2010-04-15T13:53:39.340 に答える
4

Groovy は「すぐに使える」多くの一般的なクラスを、XML、HTTP 要求、SQL データベースへのアクセス、正規表現のクラスなど、より洗練されたバージョンまたは言語構造に置き換えます。ほとんどのスクリプト タスクでは、Java ライブラリを使用する必要はまったくありません (ただし、そのオプションは引き続き使用できます)。しかし、スクリプトが生の Java ライブラリを使用している場合、Groovy はそのままの Java よりもはるかに優れています。Groovy が優れているのは、データ構造やファイル I/O の設定などの「接着」コードです。

マップとリストを使用すると、Java 互換のリストとマップを作成できます。Java クラスで動作する通常の Java オブジェクト。Groovy は、多くの場合、変数宣言と初期化を伴う複数行の Java メソッド呼び出しを 1 行に変換します。

ファイル全体を文字列にロードするには、次の短いスニペットを検討してください。

def fileContents = new File(filename).text

String fileContents = "";
try {
    BufferedReader reader = new BufferedReader(new FileInputStream(filename));
    String line = null;
    while ((line = reader.readLine()) != null) {
        text = text + line + "\n";
    }
} catch (IOException e) {
    e.printStackTrace();
}

多くの場合、例外処理はスクリプトでは重要な考慮事項ではないため、都合よく無視できます。

スクリプト言語としての Groovy の主な強みは、そこにある Java コードの膨大なライブラリに直接かつ便利にアクセスできることです。それが必要ない場合でも、groovy は perl、python、ruby などの他の言語と同じくらい豊富なスクリプト環境を提供します。

于 2010-04-15T17:35:56.097 に答える
4

たとえば、http スクリプトを実行したい場合は、Java 構文を使用して Commons HttpClient を呼び出すだけでよいのではないでしょうか。

「Commons HttpClient を使用してすぐに戻る」ことになりますが、Java 構文ではなく、Groovy 構文を使用して呼び出すことになります。Groovy 構文はJava 構文よりもはるかにコンパクトであるため、スクリプト作成に適しています。言い換えれば、Groovy で Java ライブラリを使用すると、Java で Java ライブラリを使用するよりもはるかに少ないコードで済みます。

すでに非常に多くの優れたJavaライブラリが存在する場合、Groovyベースのライブラリを開発するインセンティブはないようです。

Groovy ライブラリの作成者は、まったく新しいライブラリを開発するのではなく、既存の Java ライブラリに "Groovier" API を提供することがよくあります。例には、Grails によって提供される Hibernate ビルダー、およびHTTP ビルダー(Commons HttpClient に委譲する) が含まれます。

これらの Groovy API は、Java API を直接使用するよりもコンパクトで慣用的な代替手段を提供します。

于 2010-04-15T15:43:00.147 に答える
2

Groovyは、非常にタイトな構文のコツをつかんだら、「遅い方法」で行った多くのことにそれを使い始めます。

先日、あるシステムのGUIDに何文字あるのか疑問に思った議論がありました。数字を数えるだけでなく、これを行う方が簡単でした。

def str = '92228498-6A2F-DBA2-7A2C-F54B9E607E3A'
int num = 0
str.each {
    num++
}
println num

ローカルまたは共有スクリプトディレクトリでそれを打つと、将来のためにそこにあります。

于 2011-06-21T07:18:45.637 に答える