Upload
mwie
View
2.859
Download
3
Embed Size (px)
DESCRIPTION
Kurze Einführung in Groovy
Citation preview
Folie 1Malte Wienecke
Tech Talk: Groovy26.02.2008
Malte Wienecke
Folie 2
Was ist Groovy?
Dynamische Programmier- und Skriptsprache für die Java-VM
Konzepte von Python, Ruby, Smalltalk
Durch hohe Integrationsmöglichkeiten mit Java
„Javas bester Freund“
Open-Source Projekt bei codehaus.org
Malte Wienecke
Folie 3
Eine Groovy Geschichte
2003 - Start durch James Strachan & Bob McWriter„Eleganz von Ruby in Java“
2004 - Beginn der StandardisierungJava Specification Requests – 241
2004 - GroovyOneGroovy Entwicklertreffen in London
Aktueller Projektleiter: Guillaume Laforge
Anfang 2007 - Release 1.0
Ende 2007 - Release 1.5
Malte Wienecke
Folie 4
Warum Javas bester Freund? (1)
… läuft in der Java Virtual Machine
… erweitert und nutzt die Bibliotheken des JDK
… kann auf Java-Klassen zugreifen
… kann von Java aufgerufen werden
… kann nach Java Classfiles compiliert werden
Groovy…
Malte Wienecke
Folie 5
Warum Javas bester Freund? (2)
andere
andere
andere
andere
Java friendly
Fea
ture
ric
h
(Quelle: „Groovy in Action“, D. Koenig)
Malte Wienecke
Folie 6
Was macht Groovy groovy? (1)
Einfache Syntax: Semikolon,Klammern bei Methodenaufruf,Typangaben,Exception-Deklaration optional
Closures
Einfache Notation für Ranges, Listen und HashMaps
„public“ ist default
Erweiterte switch-Anweisungen
Malte Wienecke
Folie 7
Was macht Groovy groovy? (2)
Alles ist ein Objekt
getter- und setter-Methoden werden automatisch erzeugt und beim Attribut-Zugriff automatisch genutzt
Operator-Overloading
Automatisch importierte Pakete:groovy.lang.*, groovy.util.*, java.lang.*, java.util.*, java.net.*, java.io.*, java.math.BigInteger, BigDecimal
Malte Wienecke
Folie 8
The Groovy way to say Hello (1)
public class SayHello {
public static void main (String[] args) {
System.out.println("hello");
}
}
Java kompatibel
Malte Wienecke
Folie 9
The Groovy way to say Hello (2)
class SayHello {
static void main (String[] args) {
System.out.println("hello");
}
}
public ist default
Malte Wienecke
Folie 10
The Groovy way to say Hello (3)
class SayHello {
static void main (args) {
System.out.println("hello")
}
}
Typangaben sind optional
Semikolon optional
Malte Wienecke
Folie 11
The Groovy way to say Hello (4)
class SayHello {
static void main (args) {
println("hello")
}
}
println kennt jeder Klasse
Malte Wienecke
Folie 12
The Groovy way to say Hello (5)
println("hello")
Keine Klassen für ausführbares Skript notwendig
Malte Wienecke
Folie 13
The Groovy way to say Hello (6)
println "hello"
Klammern meist optional bei Methodenaufrufen
Malte Wienecke
Folie 14
Die primitiven Datentypen (int, short byte, long, etc.) sind echte Groovy Objekte:
def i = 1
Gleichheit von Objekten wird mit dem Operator == abgefragtassert i == new Integer(1)
Identität von Objekten kann mit der Methode is() geprüft werden:def k = iassert i.is(k)assert !( i.is(new Integer(1)) )
Alles ist ein Objekt
Malte Wienecke
Folie 15
Closure
Einfache Closure:def c = { println 'hello' }c()
Closure mit Parameter:sqare = { f -> return f * f}assert sqare(5) == 25
alternativ:degree = { it * it }
Schleifen:5.times { println 'hello' }
oder:def sum = 01.upto(5) { sum += it }assert sum == 15
Malte Wienecke
Folie 16
Ranges, Lists & Maps
Wertebereiche als eigener Datentyp 5..10Beispiel:
sum = 0(1..10).each { sum += it }
(Array)Listen mit eigener NotationBeispiel:
def list = [1, 2, 3]list.each { sum += it }assert list << 9 == [1, 2, 3, 9]assert [1, 2, 3] - [2] == [1, 3]assert [1, 2] * 2 == [1, 2, 1, 2]
Direkte Notation für (Hash)MapsBeispiel:
def map = [a: 1, b: 2, c: 3]assert map.get('a') == 1assert map['a'] == 1assert map.a == 1
Malte Wienecke
Folie 17
Switch in Groovy
switch(v) {
// Zahlen
case 1: println 'Zahl 1'; break;
// String
case 'test': println 'String test'; break;
// Range
case 10..15: println 'In Range 1..15'; break;
// Auswahl aus Liste
case [1, '1', 'Eins']: println 'Irgenwie 1'; break;
// Regular Expression
case ~/Ein.*/: println 'Fängt mit Ein an'; break;
default: println 'Default-Zweig'; break
}
Malte Wienecke
Folie 18
Groovy Strings
GStrings erlauben Ausdrücke in Strings:def cal = new GregorianCalendar()println "Monat: ${cal.get(Calendar.MONTH)+1}"println "Datum: $cal.time"
GStrings über mehrere Zeilen:def gs = """Dieser GStringhat zwei Zeilen."""
Klassische Java Strings (mehrzeilig mit ''' '''):def s = 'Java String'
Strings für Regular Expressions (kein Escape für Backslash nötig): assert 'Alles nur Worte' ==~ /((\w*) *)*/ //Vollständigen Bereich prüfen assert 'Alles nur Worte' =~ /\w*/ // Auf einzelnen Treffer prüfen def matcher = 'Alles nur Worte' =~ /\w*/ // Alle Treffer ausgeben matcher.each { println it }
Malte Wienecke
Folie 19
Builder
Builder erlauben es, komplexe Datenstrukturen aufzubauen. (GOF Pattern)
Builder für:
Groovy-Objekte: NodeBuilder
XML, HTML: groovy.xml.MarkupBuilder
Swing: SwingBuilder
Ant: AntBuilder
Eigene Builder über BuilderSupport
Malte Wienecke
Folie 20
Builder (Beispiel)
XML
<tiere>
<tier>
<art text='Hund' />
</tier>
<tier>
<art text='Katze' />
</tier>
<tier>
<art text='Maus' />
</tier>
</tiere>
XML – Builder
def b = new groovy.xml.MarkupBuilder()
b.tiere {
for (n in ['Hund','Katze','Maus']){
tier {
art(text: n)
}
}
}
Malte Wienecke
Folie 21
XML Unterstützung in Groovy
Einfaches Einlesen durch eingebauten Xml-Parser
Zugriff auf XML-Daten durch GPath-Ausdrücke
Erzeugen von XML durch XML-Builder
Groovy als Alternative zu XSLT
Malte Wienecke
Folie 22
XML-Parser (Beispiel)
XML
<tiere>
<tier>
<art text='Hund' />
</tier>
<tier>
<art text='Katze' />
</tier>
<tier>
<art text='Maus' />
</tier>
</tiere>
XML – Parser
def t = new XmlParser().parseText(xml)
// GPath auf das Object-Netz
assert t.tier.art.'@text' ==
['Hund', 'Katze', 'Maus']
Malte Wienecke
Folie 23
Tolle andere Features von Groovy
Unterstützung von JUnit
Unterstützung von Datenbanken
Unterstützung für XML
Malte Wienecke
Folie 24
Fleisch und Knochen
Aufteilung von Systemen in
Java:Statische, stabile Komponenten,Laufzeit-kritisch(Knochen)
Groovy:Dynamische, flexible Komponenten,hohe Anpaßbarkeit(Fleisch)
Malte Wienecke
Folie 25
Quellen
Wikipedia:http://de.wikipedia.org/wiki/Groovy
Vortrag von Christof Vollrath beim23rd Chaos Communication Congress, Dezember 2006
http://events.ccc.de/congress/2006/Fahrplan/events/1419.en.html
Malte Wienecke
Folie 26