Tech Talk:  Groovy 26.02.2008
Was ist Groovy? <ul><li>Dynamische Programmier-  und Skriptsprache für die Java-VM </li></ul><ul><li>Konzepte von Python, ...
Eine Groovy Geschichte <ul><li>2003 - Start durch James Strachan & Bob McWriter „Eleganz von Ruby in Java“ </li></ul><ul><...
Warum Javas bester Freund? (1) <ul><li>…  läuft in der Java Virtual Machine </li></ul><ul><li>…  erweitert und nutzt die B...
Warum Javas bester Freund? (2) andere andere andere andere Java friendly Feature rich (Quelle: „Groovy in Action“, D. Koen...
Was macht Groovy groovy? (1) <ul><li>Einfache Syntax: Semikolon, Klammern bei Methodenaufruf, Typangaben, Exception-Deklar...
Was macht Groovy groovy?  (2) <ul><li>Alles ist ein Objekt </li></ul><ul><li>getter- und setter-Methoden werden automatisc...
The Groovy way to say Hello  (1) <ul><li>public class SayHello { </li></ul><ul><li>public static void main (String[] args)...
The Groovy way to say Hello  (2) <ul><li>class SayHello { </li></ul><ul><li>static void main (String[] args) { </li></ul><...
The Groovy way to say Hello  (3) <ul><li>class SayHello { </li></ul><ul><li>static void main (args) { </li></ul><ul><li>Sy...
The Groovy way to say Hello  (4) <ul><li>class SayHello { </li></ul><ul><li>static void main (args) { </li></ul><ul><li>pr...
The Groovy way to say Hello  (5) <ul><li>println( &quot; hello &quot; ) </li></ul><ul><li>Keine Klassen für ausführbares S...
The Groovy way to say Hello  (6) <ul><li>println  &quot; hello &quot; </li></ul><ul><li>Klammern meist optional bei Method...
<ul><li>Die primitiven Datentypen (int, short byte, long, etc.) sind echte Groovy Objekte: def i = 1 </li></ul><ul><li>Gle...
Closure <ul><li>Einfache Closure: def c = { println 'hello' } c() </li></ul><ul><li>Closure mit Parameter: sqare = { f -> ...
Ranges, Lists & Maps <ul><li>Wertebereiche als eigener Datentyp  5..10 Beispiel: sum = 0 (1..10).each { sum += it } </li><...
Switch in Groovy  <ul><li>switch(v) { </li></ul><ul><li>// Zahlen </li></ul><ul><li>case 1: println 'Zahl 1'; break; </li>...
Groovy Strings <ul><li>GStrings erlauben Ausdrücke in Strings: def cal = new GregorianCalendar() println &quot;Monat: ${ca...
Builder <ul><li>Builder erlauben es, komplexe Datenstrukturen aufzubauen.  (GOF Pattern) </li></ul><ul><li>Builder für: </...
Builder (Beispiel) <ul><li>XML </li></ul><ul><li><tiere> </li></ul><ul><li><tier> </li></ul><ul><li><art text='Hund' /> </...
XML Unterstützung in Groovy <ul><li>Einfaches Einlesen durch eingebauten Xml-Parser </li></ul><ul><li>Zugriff auf XML-Date...
XML-Parser (Beispiel) <ul><li>XML </li></ul><ul><li><tiere> </li></ul><ul><li><tier> </li></ul><ul><li><art text='Hund' />...
Tolle andere Features von Groovy <ul><li>Unterstützung von JUnit </li></ul><ul><li>Unterstützung von Datenbanken </li></ul...
Fleisch und Knochen <ul><li>Aufteilung von Systemen in </li></ul><ul><ul><ul><ul><ul><li>Java : Statische, stabile Kompone...
Quellen <ul><li>Wikipedia: http://de.wikipedia.org/wiki/Groovy </li></ul><ul><li>Vortrag von Christof Vollrath beim 23rd C...
 
Upcoming SlideShare
Loading in...5
×

Tech Talk: Groovy

1,660

Published on

Kurze Einführung in Groovy

Published in: Technology
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total Views
1,660
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
17
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Tech Talk: Groovy

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

    Clipping is a handy way to collect important slides you want to go back to later.

×