groovy Samouczek
Pierwsze kroki z groovy
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 metodygetFiles()
- groovy może dowolnie przełączać się między getter / setter i składnią właściwościit.
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
(gdzieit
jest plik) wykorzystuje metodę Groovy dodaje doFile
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.