Ricerca…


Osservazioni

Groovy è

  • è un linguaggio dinamico facoltativamente digitato per Java Virtual Machine

  • si basa sui punti di forza di Java, ma ha funzioni di alimentazione aggiuntive ispirate a linguaggi come Python, Ruby e Smalltalk

  • rende disponibili agli sviluppatori Java funzionalità di programmazione moderne con una curva di apprendimento quasi zero

  • fornisce la possibilità di digitare staticmente check e compilare staticamente il tuo codice per robustezza e prestazioni

  • supporta le lingue specifiche del dominio e altre sintassi compatte in modo che il codice sia di facile lettura e manutenzione

  • rende semplice scrivere shell e creare script con le sue potenti primitive di elaborazione, le capacità di OO e un DSL ant

  • aumenta la produttività degli sviluppatori riducendo il codice di scaffolding durante lo sviluppo di applicazioni Web, GUI, database o console

  • semplifica i test supportando test unitari e mocking out-of-the-box

  • si integra perfettamente con tutte le classi e le librerie Java esistenti

  • compila direttamente in bytecode Java in modo da poterlo utilizzare ovunque tu usi Java

Versioni

Versione Note di rilascio Data di rilascio
2.4 http://groovy-lang.org/releasenotes/groovy-2.4.html 2015/01/21
2.3 http://groovy-lang.org/releasenotes/groovy-2.3.html 2014/05/05
2.2 http://groovy-lang.org/releasenotes/groovy-2.2.html 2013/11/18
2.1 http://groovy-lang.org/releasenotes/groovy-2.1.html 2013/01/24
2.0 http://groovy-lang.org/releasenotes/groovy-2.0.html 2012-06-28
1.8 http://groovy-lang.org/releasenotes/groovy-1.8.html 2011-04-27
1.7 http://groovy-lang.org/releasenotes/groovy-1.7.html 2009-12-22
1.6 http://groovy-lang.org/releasenotes/groovy-1.6.html 2009-02-18
1.5 http://groovy-lang.org/releasenotes/groovy-1.5.html 2007-12-07
1.0 2007-01-02

Installazione o configurazione

Esistono due modi comuni per installare Groovy.

Scaricare

Il file binario di Groovy può essere scaricato nella pagina di download del sito Groovy. È possibile decomprimere l'archivio e aggiungere il percorso a %GROOVY_HOME%/bin/groovy.bat alla variabile d'ambiente di sistema PATH, dove% GROOVY_HOME% è la directory in cui è stato decompresso Groovy.

SDKMAN

L'altra opzione è usare SDKMAN . Questa opzione è cresciuta rapidamente in popolarità e rende molto semplice la gestione di più versioni di Groovy. Supporta anche altre applicazioni nell'ecosfera "GR8". Questa opzione funziona molto bene in modo nativo su Linux e Mac, ma richiede Cygwin su Windows.

Seguendo le istruzioni sulla pagina di download di Groovy , è possibile effettuare le seguenti operazioni per installare SDKMAN.

$ curl -s get.sdkman.io | bash

Una volta installato SDKMAN, ora si ha accesso al comando sdk . Con questo comando puoi fare molte cose utili.

Installa Groovy

$ sdk install groovy

Questo installerà l'ultima versione di Groovy.

Elenca le versioni di Groovy

$ sdk ls groovy

Ciò consente di eseguire un comando ls stile Linux sul software Groovy, elencando tutte le opzioni disponibili. C'è un * accanto a ciascuna versione installata e un > per indicare le versioni correnti.

Cambia versioni di Groovy

$ sdk use groovy 2.4.7

Questo cambierà la versione corrente di Groovy in 2.4.7. Se sono installate altre versioni, è possibile passare a una di queste.

Puoi elencare la versione corrente di groovy con il comando groovy -version .

posh-GVM

Il nome iniziale di SDKMAN era GVM e posh-gvm è una porta di GVM per Windows PowerShell. Quindi, se sviluppi su una macchina Windows e non vuoi usare SDKMAN su Cygwin, posh-gvm è per te. Funziona come l'SDKMAN, ma invece di sdk , il comando è gmv . Così

PS C:\Users\You> gmv install groovy

installerà groovy tramite posh-gvm sulla tua macchina Windows.

Ciao mondo

La versione Groovy di Hello World.

println 'Hello World!'

Ciao mondo In groovy

L'esempio seguente illustra il più semplice Hello World in groovy usando lo script, posiziona il seguente frammento di codice in un file, ad esempio helloWorld.groovy

println 'Hello World!'

Come eseguire: Nella riga di comando, groovy helloWorld.groovy

Uscita: Hello World!

Utilizzo di Groovy su un progetto Java

Groovy ha accesso a tutte le classi java, infatti le classi Groovy sono classi Java e possono essere gestite direttamente dalla JVM. Se stai lavorando su un progetto Java, usare Groovy come semplice linguaggio di scripting per interagire con il tuo codice java è un gioco da ragazzi.

Per rendere le cose ancora migliori, quasi tutte le classi Java possono essere rinominate .groovy e compilate ed eseguite e funzioneranno esattamente come hanno fatto, Groovy è quasi un super-set di Java, questo è un obiettivo dichiarato di groovy.

Groovy ha un REPL. groovysh viene fornito con Groovy e può essere utilizzato per istanziare rapidamente e testare una classe Java se il classpath è impostato correttamente. Ad esempio se il tuo classpath punta alla tua directory "classes / bin" di eclissi, puoi salvare il tuo file in eclissi, saltare a groovysh e groovysh un'istanza della classe per testarlo.

I motivi per usare Groovy per farlo invece di solo Java sono: Il classloader è FANTASTICO nel raccogliere nuove classi man mano che vengono compilate. Generalmente non è necessario uscire / riavviare groovysh mentre si sviluppa.

La sintassi è TERSE. Questo non è eccezionale per il codice mantenibile, ma per script e test può ridurre significativamente il codice. Una delle grandi cose che fa è eliminare le eccezioni controllate (o, più precisamente, trasformare tutte le eccezioni controllate in eccezioni non controllate). Questo trasforma codice come questo (Stampa ciao dopo un secondo):

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 Groovy:

Thread.sleep(1000)
print "Hello!"

Groovy ha anche una sintassi di inizializzazione molto stretta. Questo ti permette di specificare i dati come ti piace senza pensarci:

In Java per inizializzare una mappa dovresti probabilmente fare qualcosa del genere:

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

Questo non è male, ma è un'altra cosa da mantenere. In groovy useresti semplicemente:

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

E hai finito. La sintassi dell'elenco è altrettanto semplice.

L'altro grande vantaggio è la sintassi di chiusura di groovy. È incredibilmente conciso e divertente, un po 'più difficile da mantenere, ma per gli script che non sono una priorità. Ad esempio, ecco un codice groovy per trovare tutti i file .txt che contengono la parola Hello nella directory corrente:

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

Questo esempio utilizza alcuni trucchi "Groovy":

  • .files fa riferimento al metodo getFiles() - groovy può passare tra getter / setter e la sintassi delle proprietà a volontà

  • it. si riferisce all'attuale elemento di una iterazione. { it } è una scorciatoia per { it -> it } , ad esempio:

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

  • it.text (dove it tratta di un file) utilizza un metodo Groovy aggiunge al File per recuperare l'intero testo del file. Questo è incredibilmente utile negli script.

Ciao mondo Shebang (linux)

Dato un file ciao.groovy con contenuto:

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

Può essere eseguito dalla riga di comando se si dispone dell'autorizzazione di esecuzione come

$ ./hello.groovy

Uso di Inject () On List Per creare una stringa CSV

In Groovy, il metodo inject () è uno dei metodi cumulativi che ci consente di aggiungere (o iniettare) nuove funzionalità a qualsiasi oggetto che implementa il metodo inject (). Nel caso di una raccolta, possiamo applicare una chiusura a una raccolta di oggetti in modo uniforme e quindi raggruppare i risultati in un unico valore. Il primo parametro del metodo inject () è il valore iniziale del cumulo e il secondo parametro è la chiusura.

In questo esempio, prenderemo un elenco di stringhe come parametro e restituiremo i valori di quelle stringhe delimitate da virgole. Ho usato questa funzionalità per aggiungere un elenco di valori a una stringa di query REST e, se lo si modifica un po ', l'ho usato per includere valori in un'istruzione SQL come parte di una clausola IN. Ecco il codice per fare questo:

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 questo esempio, il primo parametro del metodo inject () è una stringa di lunghezza zero, il che significa che quando si elabora il primo elemento della lista, il risultato è anche una stringa di lunghezza zero. Questo si risolve in falso nella prima valutazione ternaria ed è per questo che non abbiamo una virgola all'inizio della stringa. Con ogni iterazione consecutiva attraverso gli elementi dell'elenco, il risultato diventa la concatenazione di se stesso, una virgola e quindi l'elemento successivo fino a raggiungere l'ultimo elemento nell'elenco.

Il vantaggio di questo approccio è che non è necessaria una variabile al di fuori di un costrutto di ciclo per mantenere il risultato di stringa concatenato. L'implicazione è che questo può portare a effetti collaterali nel codice. Con l'approccio inject (), questo comportamento viene iniettato e la raccolta collaziona per te il risultato delle chiamate alla chiusura. Lo svantaggio di questo approccio può essere la leggibilità. Ma con un po 'di esperienza, diventa più facile leggere e capire, e spero che questo esempio ti aiuti a raggiungere questo obiettivo.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow