Aus dem kontext…
eine kleine einführung in das „ach so schöne“ Groovy (achtung Autor ist stark vorurteilsbehaftet… hin zu groovy).
Als erstes - Groovy ist keine Skriptsprache… Es ist eine dynamische Sprache für die JVM die ebenso in Java byte code kompiliert wird und demnach in einer JVM ausgeführt werden muss.
Man kann Groovy wild mit Java mischen wie man Lust hat.
OK… nun ein paar nette Groovy beispiele… (ich lass die vergleichende Java codes weg… kennt so und so jeder hier)
Anschnallen - its getting groovy
- Das Hello world beispiel
Jeder kennts und es ist das erste was man überall schreibt… schonmal einen Javaneuling Hello World programmieren lassen… ein einfaches Beispiel und man muss schon Klassen, methoden, static und und und erklären.
Groovy: println 'Hello World !'
kompilieren und freuen.
- native unterstützung von listen (oh man das ist groovy)
def list = [1,2,3,4,5]
println list // gibt [1,2,3,4,5] aus
println list[0] // 1
println list[-2] // 4
println list[0..2] // [1,2,3]
// über eine liste iterieren und elemente ausgeben
list.each { println it }
// ok das da oben ist ne sog. closure... dazu später mehr
// die summe aller elemente aus der liste
list.sum() // 15
// jedes element mit * 2
println list.collect { it * 2 } // [2,4,6,8,10]
// alle geraden ermitteln
println list.findAll { it % 2 == 0}
// und und und
das ganze geht auch so ‚pervers‘ für Maps
- Closures
ok die sind a weng komplexer aber eins der besten features von Groovy…
man kann es als innere Funktion betrachten… Closures sind Codeblocks die an variablen gebunden werden können. Alle closures haben einen default parameter it der genutzt werden kann wenn man selbst keinen angibt.
// ich definiere eine closure die als argumente eine liste und eine weitere closure aufnimmt.
// die closure ruft die parameterclosure auf alle elemente der liste auf
def aMathFunction = { list, closure -> list.collect { closure(it) } }
// elemente der liste werden miteinander multipliziert - auch ne closure
def myFunction_square = { it * it}
// elemente der liste werden miteinander addiert
def myFunction_add = { it + it }
// das ist eine liste....
def myCol = [1,3,5]
// ein element vergessen ?
myCol << 7
// ausgabe [1,9,25,49]
println aMathfunction(myCol, myFunction_square)
// ausgabe [1,6,10,14]
println aMathfunction(myCol, myFunction_add)
- Alle text Files eines Verzeichnisses kopieren ?
// für jedes File in 'html/support'
new File("html/support").eachFile { file ->
if(!file.isDirectory()) {
// schreibe den inhalt des aktuellen files in das neue file
new File(outDir, file.name).text = file.text
}
}```
4. for schleifen:
```5.times { println "Hallo" }
0.upto(5) { println "Hallo" }
0.step(5,1) { println ""Hallo" }```
5. Systemcalls
```println "ipconfig /all".execute()```
6. Strings
```def text = """ Das ist ein String
und das
das gehört auch dazu
und und und
"""
def simpleText = "byte-welt ist nicht die Nummer 1"
println simpleText - "nicht "
- dynamische Methoden:
def printX(times) {
println "X" * times
}
def printY(times) {
println "Y" * times
}
}
def y = "Y"
new T()."print$y"(5) // YYYY
y = "X"
new T()."print$y"(5) // XXXX
UND UND UND… es gibt noch sooooo viel nettes (und auch gefährliches !!) Zeug…
ich liebe es…
NACHTEIL:
Ja es gibt sie…
naja
nennen wir mal n paar
-
schlechte IDE unterstützung… Plugin für Eclipse ist miserable… refactor, code completion, compile errors/warnings → alles klappt nicht wirklich
-
keine starke Typisierung… man muss nicht den typ angebene… macht manches leichter, aber nicht unbedingt.
So als nächstes wird dann GRAILS angeschaut - Groovy goes webapplication
Probierts aus… Groovy ist Groovy