!!! Skriptsprache Groovy

Groovy ist eine Skriptsprache, 
* deren Syntax an Java angelehnt ist und
* die in einer Java VM läuft, d.h. Groovy wird in Java-Bytecode kompiliert.

Seiten im Wiki der LUG Krefeld, die mit dem '''Groovy'''-Tag gekennzeichnet sind:

[{HasTagOf Groovy}]

Update am 09.01.2007:
Groovy in der Version 1.0 steht zum [Download|http://groovy.codehaus.org/Download] bereit. Quelle: [Heise|http://www.heise.de/newsticker/result.xhtml?url=/newsticker/meldung/83138&words=Java] --MarkusMonderkamp

!! Integration in Eclipse

Ich starte, indem ich mir das passende Plugin in meine EclipseIDE installiere. Dazu trage ich den Link http://dist.codehaus.org/groovy/distributions/update/ als Update Site ein.

Dann lege ich ein neues Java-Projekt an und füge die Groovy-Nature hinzu. Das geht über den entsprechenden Eintrag im Rechte-Maustaste-Menü zum neu angelegten Projekt.


!!Erste Schritte

Zunächst versuche ich einige der Feature von Groovy aufzuprobieren.


!Einbaute Syntax für Listen, Maps etc.
{{{
  list = ["Peter", "Paul", "Mary"]
  list.each { println it }
}}}
{{{
  map = [id:1, name:"Peter", age:44]
  println "Peter's name: " + map["name"] 
  println map.name + "'s age is " + map.age
  println "${map.name}'s age is $map.age"
}}}

!Closures

Closures sind Code-Stücke, die man Variablen zuweisen kann. Closures können als Parameter übergeben werden
und stellen so ein sehr mächtiges Werkzeug dar, um Funktionen sehr universell zu programmieren.
{{{
  closure = { text -> println "Der Text ist: $text" }
  list = ["Peter", "Paul", "Mary"]
  list.each { closure(it) }
}}}

!Reguläre Ausdrücke

Die Sprache Groovy verfügt über eine Syntax für reguläre Ausdrücke entsprechend dem __java.regexp__-Package.

Der binäre Operator {{{ ==~ }}} erwartet Links einen String und rechts einen regulären Ausdruck. Das Ergebnis
ist __true__, wenn der String den Ausdruck matched.
{{{
  if ("potato" ==~ /potatoe?/) println "Ok!"
  if ("potatoe" ==~ /potatoe?/) println "Ok!"
  if ("potatoo" ==~ /potatoe?/) println "Ok!"
}}}

Der binäre Operator {{{ =~ }}} erwartet ebenfalls String und regulären Ausdruck als Parameter, er liefert jedoch einen
__Matcher__. Aus dem Matcher lassen sich dann Variablen extrahieren, die Klammer-Teilausdrücke im regulären Ausdruck
matchen.
{{{
  def text = "Schulze, Hans-Georg, Cologne\nMeier-Ebert, Hans-Gustav, Essen\nKlugewas, Hermann, Berlin\n"
  def matches = text =~ /([^,]*), ([^,]*), ([^\n]*)\n?/
  for (i in 0..matches.groupCount()-1) {
    m = matches[i]
    println "${m[1]} ${m[2]} lives in ${m[3]}"
  }
}}}

!!Weitergehende Funktionen

!SQL
{{{
  import groovy.sql.Sql;

  sql = Sql.newInstance("jdbc:mysql://localhost:3306/test", 
    "test", "geheim", "com.mysql.jdbc.Driver");
  res = sql.eachRow(
    "select * from person where age > 25", 
    { println "$it.surname is $it.age years old" }
  )
}}}

!!~GroovyWebstart

Machbarkeitsstudie für [Java-Webstart|http://en.wikipedia.org/wiki/Java_Web_Start] einer Groovy-Anwendung: GroovyWebstart

!!Links

* [Groovy Homepage|http://www.groovy-lang.org/] 
* [GRails|http://www.grails.org] ist das Groovy-Web-Framework

[{Tag Java Groovy}]