Szukaj…


Uwagi

Groovy jest

  • jest opcjonalnie wpisywanym językiem dynamicznym dla wirtualnej maszyny Java

  • bazuje na mocnych stronach Javy, ale ma dodatkowe funkcje mocy inspirowane takimi językami jak Python, Ruby i Smalltalk

  • udostępnia programistom Java nowoczesne funkcje programowania z niemal zerową krzywą uczenia się

  • zapewnia możliwość statycznego sprawdzania typu i kompilacji statycznej pod kątem niezawodności i wydajności

  • obsługuje języki specyficzne dla domeny i inną kompaktową składnię, dzięki czemu kod jest łatwy do odczytania i obsługi

  • ułatwia pisanie powłok i budowanie skryptów dzięki potężnym operacjom prymitywnym, zdolnościom OO i Ant DSL

  • zwiększa produktywność programistów poprzez ograniczenie kodu rusztowania podczas tworzenia aplikacji internetowych, GUI, baz danych lub aplikacji konsolowych

  • upraszcza testowanie, wspierając testy jednostkowe i wyśmiewanie po wyjęciu z pudełka

  • bezproblemowo integruje się ze wszystkimi istniejącymi klasami i bibliotekami Java

  • kompiluje bezpośrednio do kodu bajtowego Java, dzięki czemu można go używać w dowolnym miejscu w Javie

Wersje

Wersja Informacje o wydaniu Data wydania
2.4 http://groovy-lang.org/releasenotes/groovy-2.4.html 21.01.2015
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 18.11.2013
2.1 http://groovy-lang.org/releasenotes/groovy-2.1.html 24.01.2013
2.0 http://groovy-lang.org/releasenotes/groovy-2.0.html 28.06.2012
1.8 http://groovy-lang.org/releasenotes/groovy-1.8.html 27.04.2011
1.7 http://groovy-lang.org/releasenotes/groovy-1.7.html 22.12.2009
1.6 http://groovy-lang.org/releasenotes/groovy-1.6.html 18.02.2009
1.5 http://groovy-lang.org/releasenotes/groovy-1.5.html 2007-12-07
1.0 02.01.2007

Instalacja lub konfiguracja

Istnieją dwa popularne sposoby instalowania Groovy.

Pobieranie

Plik binarny Groovy można pobrać na stronie pobierania witryny Groovy. Możesz rozpakować archiwum i dodać ścieżkę do %GROOVY_HOME%/bin/groovy.bat do zmiennej środowiskowej PATH, gdzie% GROOVY_HOME% to katalog, w którym Groovy jest rozpakowywany.

SDKMAN

Inną opcją jest użycie SDKMAN . Ta opcja szybko zyskała na popularności i sprawia, że zarządzanie wieloma wersjami Groovy jest bardzo proste. Obsługuje również inne aplikacje w ekosferze „GR8”. Ta opcja działa bardzo dobrze natywnie w systemach Linux i Mac, ale wymaga Cygwin w systemie Windows.

Postępując zgodnie z instrukcjami na stronie pobierania Groovy , możesz wykonać następujące kroki, aby zainstalować SDKMAN.

$ curl -s get.sdkman.io | bash

Po zainstalowaniu SDKMAN masz teraz dostęp do polecenia sdk . Za pomocą tego polecenia możesz zrobić wiele przydatnych rzeczy.

Zainstaluj Groovy

$ sdk install groovy

Spowoduje to zainstalowanie najnowszej wersji Groovy.

Wymień wersje Groovy

$ sdk ls groovy

Pozwala to na uruchomienie polecenia ls stylu Linux na oprogramowaniu Groovy, wyświetlając wszystkie dostępne opcje. Obok każdej zainstalowanej wersji znajduje się * , a > oznacza bieżące wersje.

Przełącz wersje Groovy

$ sdk use groovy 2.4.7

Spowoduje to zmianę bieżącej wersji Groovy na 2.4.7. Jeśli masz zainstalowane inne wersje, możesz przełączyć się na dowolną z nich.

Możesz wyświetlić aktualną wersję groovy za pomocą polecenia groovy -version .

posh-gvm

Początkowa nazwa SDKMAN to GVM, a posh-gvm to port GVM dla Windows Powershell. Jeśli więc tworzysz na komputerze z systemem Windows i nie chcesz używać SDKMAN na Cygwin, posh-gvm jest dla Ciebie. Działa tak samo jak SDKMAN, ale zamiast sdk polecenie brzmi gmv . Więc

PS C:\Users\You> gmv install groovy

zainstaluje groovy przez posh-gvm na twoim komputerze z Windows.

Witaj świecie

Groovy wersja Hello World.

println 'Hello World!'

Hello World In groovy

Poniższy przykład ilustruje najprostszy Hello World w świetnym użyciu skryptu, umieść następujący fragment kodu w pliku, powiedz helloWorld.groovy

println 'Hello World!'

Jak wykonać: W wierszu poleceń groovy helloWorld.groovy

Wyjście: Hello World!

Korzystanie z Groovy w projekcie Java

Groovy ma dostęp do wszystkich klas java, w rzeczywistości klasy Groovy są klasami Java i mogą być uruchamiane bezpośrednio przez JVM. Jeśli pracujesz nad projektem Java, używanie Groovy jako prostego języka skryptowego do interakcji z kodem Java nie jest żadnym problemem.

Aby uczynić wszystko jeszcze lepszym, prawie każda klasa Java może zostać przemianowana na .groovy oraz skompilowana i uruchomiona i będzie działać dokładnie tak, jak to zrobiła, groovy jest bliski bycia super-zestawem Java, jest to określony cel groovy.

Groovy ma REPL. groovysh jest dostarczany z Groovy i może być używany do szybkiego tworzenia instancji i testowania klasy Java, jeśli twoja ścieżka klasy jest poprawnie skonfigurowana. Na przykład, jeśli classpath wskazuje na katalog „klas / bin” zaćmienia, możesz zapisać plik w środowisku zaćmienia, przeskoczyć do groovysh i utworzyć instancję klasy, aby go przetestować.

Powody, dla których warto użyć Groovy, aby to zrobić, a nie tylko Javę, to: Moduł ładujący klasy jest WIELKI przy pobieraniu nowych klas podczas ich kompilacji. Zasadniczo nie musisz wychodzić z programu groovysh w trakcie jego rozwoju.

Składnia to TERSE. Nie jest to świetne w przypadku kodu, który można utrzymać, ale w przypadku skryptów i testów może znacznie skrócić kod. Jedną z najważniejszych rzeczy jest eliminowanie sprawdzonych wyjątków (lub, dokładniej, przekształcanie wszystkich sprawdzonych wyjątków w niesprawdzone wyjątki). Spowoduje to zmianę kodu w następujący sposób (Wydrukuj cześć za 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!");
    }
}

w Groovy's:

Thread.sleep(1000)
print "Hello!"

Groovy ma również bardzo ścisłą składnię inicjującą. Pozwala to określić dane tak, jak lubisz, bez zastanowienia:

Aby zainicjować mapę w Javie, powinieneś prawdopodobnie zrobić coś takiego:

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

To nie jest złe, ale jest coś innego do utrzymania. W groovy po prostu użyłbyś:

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

I gotowe. Składnia listy jest równie łatwa.

Kolejną naprawdę dużą zaletą jest składnia groovy. Jest niesamowicie zwięzły i zabawny, nieco trudniejszy w utrzymaniu, ale w przypadku skryptów nie jest to priorytetem. Jako przykład, oto świetny kod, aby znaleźć wszystkie pliki .txt zawierające słowo Hello w bieżącym katalogu:

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

W tym przykładzie użyto kilku sztuczek „Groovy”:

  • .files odnosi się do metody getFiles() - groovy może dowolnie przełączać się między getter / setter i składnią właściwości

  • it. odnosi się do bieżącego elementu iteracji. { it } to skrót do { it -> it } , np .:

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

  • it.text (gdzie it jest plik) wykorzystuje metodę Groovy dodaje do File aby pobrać cały tekst w pliku. Jest to niezwykle pomocne w skryptach.

Hello world Shebang (Linux)

Biorąc pod uwagę plik hello.groovy z zawartością:

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

Można wykonać z wiersza poleceń, jeśli podano uprawnienia do wykonywania jako

$ ./hello.groovy

Korzystanie z funkcji inject () On List w celu utworzenia ciągu CSV

W Groovy metoda inject () jest jedną z metod skumulowanych, która pozwala nam dodawać (lub wstrzykiwać) nową funkcjonalność do dowolnego obiektu, który implementuje metodę inject (). W przypadku kolekcji możemy zastosować zamknięcie do zbioru obiektów równomiernie, a następnie zestawić wyniki w jedną wartość. Pierwszym parametrem metody inject () jest początkowa wartość kumulacji, a drugim parametrem jest zamknięcie.

W tym przykładzie weźmiemy Listę ciągów jako parametr i wyprowadzimy wartości tych ciągów oddzielonych przecinkami. Użyłem tej funkcji, aby dołączyć listę wartości do ciągu zapytania REST, a jeśli ją nieco zmodyfikujesz, użyłem jej do włączenia wartości do instrukcji SQL jako części klauzuli IN. Oto kod, aby to zrobić:

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" 

W tym przykładzie pierwszym parametrem metody inject () jest ciąg o zerowej długości, co oznacza, że podczas przetwarzania pierwszego elementu listy wynikiem jest również ciąg o zerowej długości. To rozwiązuje fałsz w pierwszej trójstronnej ocenie, dlatego nie dostajemy przecinka na początku łańcucha. Z każdą kolejną iteracją przez elementy listy wynik staje się konkatenacją samego siebie, przecinkiem, a następnie kolejnym elementem, aż dotrzemy do ostatniego elementu na liście.

Zaletą tego podejścia jest to, że nie jest potrzebna zmienna poza konstrukcją zapętloną do przechowywania połączonego wyniku String. Oznacza to, że może to prowadzić do skutków ubocznych w kodzie. W przypadku metody inject () takie zachowanie jest wstrzykiwane, a kolekcja zestawia dla ciebie wynik wywołań zamknięcia. Minusem tego podejścia może być czytelność. Ale z pewnym doświadczeniem staje się łatwiejsze do odczytania i zrozumienia, i mam nadzieję, że ten przykład pomoże ci osiągnąć ten cel.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow