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

groovyErste Schritte mit Groovy


Bemerkungen

Groovy ist

  • ist eine optional typisierte dynamische Sprache für die Java Virtual Machine

  • baut auf den Stärken von Java auf, verfügt jedoch über zusätzliche Leistungsmerkmale, die von Sprachen wie Python, Ruby und Smalltalk inspiriert sind

  • stellt Java-Entwicklern moderne Programmierfunktionen mit einer Lernkurve von nahezu Null zur Verfügung

  • bietet die Möglichkeit, Ihren Code statisch zu prüfen und statisch zu kompilieren, um Robustheit und Leistung zu gewährleisten

  • Unterstützt domänenspezifische Sprachen und andere kompakte Syntax, sodass Ihr Code einfach gelesen und verwaltet werden kann

  • Das Schreiben von Shell- und Build-Skripts mit seinen leistungsstarken Verarbeitungsfunktionen, OO-Fähigkeiten und einem Ant-DSL vereinfacht das Schreiben

  • Steigert die Entwicklerproduktivität durch Reduzierung des Scaffolding-Codes bei der Entwicklung von Web-, GUI-, Datenbank- oder Konsolenanwendungen

  • vereinfacht das Testen, indem es Unit-Tests unterstützt und sofort einsatzbereit macht

  • nahtlos in alle vorhandenen Java-Klassen und -Bibliotheken integrierbar

  • kompiliert direkt in Java-Bytecode, sodass Sie ihn überall verwenden können, wo Sie Java verwenden

Versionen

Hallo Welt

Die Groovy-Version von Hello World.

println 'Hello World!'
 

Hallo Welt In Groovy

Das folgende Beispiel veranschaulicht das einfachste Hello World in groovy using script. helloWorld.groovy den folgenden Code-Ausschnitt in eine Datei ein, helloWorld.groovy

println 'Hello World!'
 

Wie auszuführen: In der Kommandozeile groovy helloWorld.groovy

Ausgabe: Hello World!

Hallo Welt Shebang (Linux)

Gegeben eine hallo.groovy Datei mit Inhalt:

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

Kann von der Befehlszeile aus ausgeführt werden, wenn die Ausführungsberechtigung als gegeben ist

$ ./hello.groovy
 

Installation oder Setup

Groovy kann auf zwei Arten installiert werden.

Herunterladen

Die Groovy-Binärdatei kann auf der Download- Seite der Groovy-Website heruntergeladen werden. Sie können das Archiv entpacken und den Pfad zu %GROOVY_HOME%/bin/groovy.bat der Systemumgebungsvariablen PATH hinzufügen, wobei% GROOVY_HOME% das Verzeichnis ist, in dem Groovy entpackt wird.

SDKMAN

Die andere Option ist die Verwendung von SDKMAN . Diese Option hat schnell an Popularität gewonnen und macht die Verwaltung mehrerer Versionen von Groovy sehr einfach. Es unterstützt auch andere Anwendungen in der Ökosphäre "GR8". Diese Option funktioniert nativ auf Linux und Mac sehr gut, erfordert aber Cygwin unter Windows.

Befolgen Sie die Anweisungen auf der Download-Seite "Groovy" , um SDKMAN zu installieren.

$ curl -s get.sdkman.io | bash

Nach der Installation von SDKMAN haben Sie nun Zugriff auf den Befehl sdk . Mit diesem Befehl können Sie viele nützliche Dinge tun.

Installieren Sie Groovy

$ sdk install groovy

Dadurch wird die neueste Version von Groovy installiert.

Listet Versionen von Groovy auf

$ sdk ls groovy

Auf diese Weise können Sie einen Linux-Style-Befehl ls in der Groovy-Software ausführen und alle verfügbaren Optionen auflisten. Neben jeder installierten Version gibt es ein * und ein > , um Ihre aktuellen Versionen anzuzeigen.

Wechseln Sie die Versionen von Groovy

$ sdk use groovy 2.4.7

Dadurch wird die aktuelle Version von Groovy in 2.4.7 geändert. Wenn Sie andere Versionen installiert haben, können Sie zu jeder Version wechseln.

Sie können die aktuelle Version von groovy mit dem Befehl groovy -version .

posh-gvm

Der ursprüngliche Name von SDKMAN war GVM und posh-gvm ist eine Portierung von GVM für Windows Powershell. Wenn Sie also auf einem Windows-Computer entwickeln und SDKMAN nicht für Cygwin verwenden möchten, ist posh-gvm genau das Richtige für Sie. Es funktioniert genauso wie SDKMAN, aber anstelle von sdk ist der Befehl gmv . So

PS C:\Users\You> gmv install groovy
 

wird durch posh-gvm auf Ihrem Windows-Rechner installiert.

Groovy in einem Java-Projekt verwenden

Groovy hat Zugriff auf alle Java-Klassen. Groovy-Klassen sind Java-Klassen und können von der JVM direkt ausgeführt werden. Wenn Sie an einem Java-Projekt arbeiten, ist die Verwendung von Groovy als einfache Skriptsprache für die Interaktion mit Ihrem Java-Code ein Kinderspiel.

Um die Dinge noch besser zu machen, kann fast jede Java-Klasse in .groovy umbenannt, kompiliert und ausgeführt werden und funktioniert genauso wie Groove. Es ist fast ein Super-Set von Java.

Groovy hat eine REPL. groovysh wird mit Groovy groovysh und kann verwendet werden, um eine Java-Klasse schnell zu instanziieren und zu testen, wenn der Klassenpfad richtig eingerichtet ist. Wenn zum Beispiel Ihr classpath auf Ihr Eclipse-Verzeichnis "classes / bin" zeigte, könnten Sie Ihre Datei in Eclipse speichern, zu groovysh springen und die Klasse zum Testen instanziieren.

Die Gründe, Groovy anstelle von Java zu verwenden, sind: Der Classloader kann GRÖSSE beim Abholen neuer Klassen verwenden, wenn sie kompiliert werden. Sie müssen groovysh im Allgemeinen nicht groovysh Entwicklung groovysh / neu starten.

Die Syntax lautet TERSE. Dies ist nicht besonders gut für wartbaren Code, aber für Skripts und Tests kann der Code erheblich reduziert werden. Es ist eine der großen Aufgaben, die markierte Ausnahmen zu beseitigen (oder genauer gesagt, alle geprüften Ausnahmen in ungeprüfte Ausnahmen umzuwandeln). Dies ändert den Code wie folgt (Hallo Druck nach einer Sekunde):

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!");
    }
}
 

in Groovys:

Thread.sleep(1000)
print "Hello!"
 

Groovy hat auch eine sehr enge Initialisierungssyntax. Auf diese Weise können Sie die Daten nach Ihren Wünschen angeben, ohne darüber nachzudenken:

Um in Java eine Karte zu initialisieren, sollten Sie wahrscheinlich Folgendes tun:

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])
}
 

Das ist nicht schlecht, aber es ist etwas anderes, das man beibehalten muss. In Groovy würden Sie einfach Folgendes verwenden:

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

Und du bist fertig. Listensyntax ist genauso einfach.

Der andere wirklich große Vorteil ist die Verschlußsyntax von Groovy. Es ist erstaunlich knapp und macht Spaß, es ist etwas schwieriger zu warten, aber für Skripts ist das keine Priorität. Als Beispiel ist hier ein grooviger Code zum Suchen aller .txt Dateien, die das Wort " Hello im aktuellen Verzeichnis enthalten:

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

In diesem Beispiel werden einige "Groovy" -Tricks verwendet:

  • .files bezieht sich auf die getFiles() -Methode - groovy kann nach getFiles() zwischen getter / setter und Eigenschaftssyntax wechseln

  • it. bezieht sich auf das aktuelle Element einer Iteration. { it } ist eine Abkürzung für { it -> it } , zB:

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

  • it.text (wo it ist eine Datei) verwendet eine Methode , groovy fügt File den gesamten Text der Datei abzurufen. Dies ist in Skripten erstaunlich hilfreich.

Verwenden von inject () für die Liste zum Erstellen einer CSV-Zeichenfolge

In Groovy ist die inject () -Methode eine der kumulativen Methoden, die es uns ermöglicht, neue Funktionalität zu jedem Objekt hinzuzufügen (oder einzufügen), das die inject () -Methode implementiert. Im Falle einer Collection können wir einen einheitlichen Abschluss für eine Collection von Objekten anwenden und die Ergebnisse dann zu einem einzigen Wert zusammenfassen. Der erste Parameter der inject () - Methode ist der Anfangswert der Kumulierung und der zweite Parameter ist der Abschluss.

In diesem Beispiel nehmen wir eine Liste von Strings als Parameter und geben die Werte dieser durch Kommas getrennten Strings aus. Ich habe diese Funktionalität verwendet, um eine Liste von Werten an eine REST-Abfragezeichenfolge anzuhängen. Wenn Sie sie etwas ändern, habe ich sie verwendet, um Werte als Teil einer IN-Klausel in eine SQL-Anweisung aufzunehmen. Hier ist der Code dafür:

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" 
 

In diesem Beispiel ist der erste Parameter für die inject () - Methode eine Zeichenfolge mit der Länge Null. Dies bedeutet, dass das Ergebnis bei der Verarbeitung des ersten Elements der Liste auch eine Zeichenfolge mit der Länge Null ist. Dies wird in der ersten ternären Bewertung zu falsch aufgelöst, weshalb wir am Anfang der Zeichenfolge kein Komma erhalten. Bei jeder nachfolgenden Iteration durch die Elemente der Liste wird das Ergebnis zur Verkettung von sich selbst, einem Komma und dann zum nächsten Element, bis wir das letzte Element in der Liste erreichen.

Der Vorteil dieser Methode ist, dass Sie keine Variable außerhalb eines Schleifenkonstrukts benötigen, um das Ergebnis der verketteten Zeichenfolge zu speichern. Dies bedeutet, dass dies zu Nebenwirkungen im Code führen kann. Mit dem inject () -Ansatz wird dieses Verhalten injiziert und die Sammlung sammelt das Ergebnis der Aufrufe für die Schließung für Sie. Der Nachteil dieses Ansatzes kann die Lesbarkeit sein. Mit etwas Erfahrung wird es jedoch einfacher zu lesen und zu verstehen, und ich hoffe, dieses Beispiel hilft Ihnen dabei, dieses Ziel zu erreichen.