26
Folie 1 Malte Wienecke Tech Talk: Groovy 26.02.2008

Tech Talk: Groovy

  • Upload
    mwie

  • View
    2.859

  • Download
    3

Embed Size (px)

DESCRIPTION

Kurze Einführung in Groovy

Citation preview

Page 1: Tech Talk: Groovy

Folie 1Malte Wienecke

Tech Talk: Groovy26.02.2008

Page 2: Tech Talk: Groovy

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

Page 3: Tech Talk: Groovy

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

Page 4: Tech Talk: Groovy

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…

Page 5: Tech Talk: 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)

Page 6: Tech Talk: Groovy

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

Page 7: Tech Talk: Groovy

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

Page 8: Tech Talk: Groovy

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

Page 9: Tech Talk: Groovy

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

Page 10: Tech Talk: Groovy

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

Page 11: Tech Talk: Groovy

Malte Wienecke

Folie 11

The Groovy way to say Hello (4)

class SayHello {

static void main (args) {

println("hello")

}

}

println kennt jeder Klasse

Page 12: Tech Talk: Groovy

Malte Wienecke

Folie 12

The Groovy way to say Hello (5)

println("hello")

Keine Klassen für ausführbares Skript notwendig

Page 13: Tech Talk: Groovy

Malte Wienecke

Folie 13

The Groovy way to say Hello (6)

println "hello"

Klammern meist optional bei Methodenaufrufen

Page 14: Tech Talk: Groovy

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

Page 15: Tech Talk: Groovy

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

Page 16: Tech Talk: Groovy

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

Page 17: Tech Talk: Groovy

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

}

Page 18: Tech Talk: Groovy

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 }

Page 19: Tech Talk: Groovy

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

Page 20: Tech Talk: Groovy

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)

}

}

}

Page 21: Tech Talk: Groovy

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

Page 22: Tech Talk: Groovy

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']

Page 23: Tech Talk: Groovy

Malte Wienecke

Folie 23

Tolle andere Features von Groovy

Unterstützung von JUnit

Unterstützung von Datenbanken

Unterstützung für XML

Page 24: Tech Talk: Groovy

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)

Page 25: Tech Talk: Groovy

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

Page 26: Tech Talk: Groovy

Malte Wienecke

Folie 26