Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tech Talk: Groovy

2,119 views

Published on

Kurze Einführung in Groovy

Published in: Technology

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>

×