Sök…


Anmärkningar

Groovy är

  • är ett valfritt typiskt dynamiskt språk för Java Virtual Machine

  • bygger på styrkorna i Java men har ytterligare kraftfunktioner inspirerade av språk som Python, Ruby och Smalltalk

  • gör moderna programmeringsfunktioner tillgängliga för Java-utvecklare med en nästan noll inlärningskurva

  • ger möjlighet att statisk skriva kontroll och statiskt sammanställa din kod för robusthet och prestanda

  • stöder domänspecifika språk och andra kompakta syntax så att din kod är lätt att läsa och underhålla

  • gör skrivskal och bygga skript enkelt med sina kraftfulla bearbetningsprimitiv, OO-förmågor och en Ant DSL

  • ökar utvecklarens produktivitet genom att minska ställningskod vid utveckling av webb-, GUI-, databas- eller konsolapplikationer

  • förenklar testning genom att stödja enhetstestning och håna out-of-the-box

  • integreras sömlöst med alla befintliga Java-klasser och bibliotek

  • kompilerar direkt till Java-bytekod så att du kan använda den var du än använder Java

versioner

Version Släppanteckningar Utgivningsdatum
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

Installation eller installation

Det finns två vanliga sätt att installera Groovy.

Ladda ner

Groovy-binären kan laddas ner på nedladdningssidan på Groovy-webbplatsen. Du kan packa upp arkiv och lägga till sökväg till %GROOVY_HOME%/bin/groovy.bat till PATH-systemets miljövariabel, där% GROOVY_HOME% är katalogen där Groovy är packad.

SDKMAN

Det andra alternativet är att använda SDKMAN . Det här alternativet har vuxit snabbt i popularitet och gör hanteringen av flera versioner av Groovy mycket enkel. Den stöder också andra applikationer i ekosfären "GR8". Det här alternativet fungerar mycket bra nativt på Linux och Mac, men kräver Cygwin på Windows.

Följ anvisningarna på nedladdningssidan från Groovy , kan du ta följande steg för att installera SDKMAN.

$ curl -s get.sdkman.io | bash

När SDKMAN har installerats har du nu tillgång till sdk kommandot. Med detta kommando kan du göra många användbara saker.

Installera Groovy

$ sdk install groovy

Detta kommer att installera den senaste versionen av Groovy.

Lista versioner av Groovy

$ sdk ls groovy

Detta tillåter dig att köra ett Linux-kommandot ls format på Groovy-programvaran med alla tillgängliga alternativ. Det finns en * bredvid varje installerad version och en > att ange dina aktuella versioner.

Byt versioner av Groovy

$ sdk use groovy 2.4.7

Detta kommer att ändra den aktuella versionen av Groovy till 2.4.7. Om du har andra versioner installerade kan du byta till någon av dem.

Du kan lista den aktuella versionen av groovy med kommandot groovy -version .

posh-GVM

Det ursprungliga namnet på SDKMAN var GVM och posh-gvm är en port på GVM för Windows Powershell. Så om du utvecklar på en Windows-maskin och inte vill använda SDKMAN på Cygwin, är posh-gvm åt dig. Det fungerar på samma sätt som SDKMAN, men istället för sdk är kommandot gmv . Så

PS C:\Users\You> gmv install groovy

kommer att installera groovy genom posh-gvm på din Windows-maskin.

Hej världen

Groovy-versionen av Hello World.

println 'Hello World!'

Hej världen i groovy

Följande exempel illustrerar den enklaste Hello World i groovy med skript, placera följande kodavsnitt i en fil, säg helloWorld.groovy

println 'Hello World!'

Så här kör du: i kommandoraden, groovy helloWorld.groovy

Output: Hello World!

Använda Groovy på ett Java-projekt

Groovy har tillgång till alla java-klasser, i själva verket Groovy-klasser ÄR Java-klasser och kan köras av JVM direkt. Om du arbetar på ett Java-projekt är det ingen som vill använda Groovy som ett enkelt skriptspråk för att interagera med din java-kod.

För att göra sakerna ännu bättre kan nästan alla Java-klasser byt namn till .groovy och sammanställas och köras och kommer att fungera exakt som det gjorde, groovy är nära att vara en superuppsättning av Java, detta är ett uttalat mål för groovy.

Groovy har ett REPL. groovysh kommer med Groovy och kan användas för att snabbt instansera och testa en Java-klass om din klassväg är korrekt inställd. Till exempel om din classpath pekade på din förmörkelse "klasser / bin" -katalog, kan du spara din fil i förmörkelse, hoppa till groovysh och instansera klassen för att testa den.

Skälen till att använda Groovy för att göra detta istället för bara Java är: Klasslastaren är STOR att plocka upp nya klasser när de sammanställs. Du behöver i allmänhet inte lämna / starta groovysh när du utvecklas.

Syntaxen är TERSE. Detta är inte bra för underhållbar kod, men för skript och tester kan det skära din kod betydligt. En av de stora sakerna som det gör är att eliminera kontrollerade undantag (eller, mer exakt, förvandla alla kontrollerade undantag till okontrollerade undantag). Detta vänder kod så här (Skriv ut hej efter en sekund):

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

till Groovy's:

Thread.sleep(1000)
print "Hello!"

Groovy har också mycket snäv initialiseringssyntax. Detta gör att du kan ange data precis som du vill utan att tänka på dem:

För att initialisera en karta i Java bör du antagligen göra något liknande:

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

Detta är inte dåligt, men det är något annat att underhålla. I groovy skulle du bara använda:

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

Och du är klar. Listsyntax är lika enkelt.

Den andra riktigt stora fördelen är groovys stängningssyntax. Det är otroligt spänt och roligt, något svårare att underhålla, men för skript är det inte prioriterat. Som exempel är här en groovy kod för att hitta alla .txt filer som innehåller ordet Hello i den aktuella katalogen:

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

Detta exempel använder några "Groovy" -trick:

  • .files hänvisar till getFiles() - groovy kan växla mellan getter / setter och egendomssyntax när som helst

  • it. hänvisar till det aktuella elementet i en iteration. { it } är en genväg för { it -> it } , t.ex.:

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

  • it.text (där it är en fil) använder en metod som groovy lägger till i File att hämta hela filens text. Detta är otroligt bra i skript.

Hej värld Shebang (linux)

Fick en hello.groovy-fil med innehåll:

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

Kan köras från kommandoraden om exekveringstillstånd ges som

$ ./hello.groovy

Använda injicera () på listan för att skapa CSV-sträng

I Groovy är metoden inject () en av de kumulativa metoderna som gör att vi kan lägga till (eller injicera) ny funktionalitet i alla objekt som implementerar metoden injicera (). När det gäller en samling kan vi tillämpa en stängning på en samling av objekt på ett enhetligt sätt och sedan sortera resultaten till ett enda värde. Den första parametern till metoden injicera () är det ursprungliga värdet för kumulationen och den andra parametern är stängningen.

I det här exemplet tar vi en lista över strängar som en parameter och matar ut värdena för de strängar som är avgränsade av kommatecken. Jag har använt den här funktionen för att lägga till en lista med värden i en REST-frågesträng och om du ändrar den lite, har jag använt den för att inkludera värden i ett SQL-uttalande som en del av en IN-klausul. Här är koden för att göra detta:

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" 

I det här exemplet är den första parametern till metoden inject () en sträng med noll längd, vilket innebär att vid bearbetning av det första elementet i listan är resultatet också en sträng med noll längd. Detta löser sig till falskt i den första ternära utvärderingen, varför vi inte får komma i början av strängen. Med varje iteration i följd genom elementen i listan blir resultatet själva sammankopplingen, ett komma och sedan nästa objekt tills vi når det sista objektet i listan.

Fördelen med detta tillvägagångssätt är att du inte behöver en variabel utanför en slingkonstruktion för att hålla det sammansatta strängresultatet. Betydelsen är att detta kan leda till biverkningar i din kod. Med metoden injicera () injiceras detta beteende och samlingen sammanställer resultatet av samtal till stängningen för dig. Nackdelen med denna strategi kan vara läsbarhet. Men med viss erfarenhet blir det lättare att läsa och förstå, och jag hoppas att detta exempel hjälper dig att uppnå det målet.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow