Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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...
 
Nächste SlideShare
Wird geladen in …5
×

Tech Talk: Groovy

2.105 Aufrufe

Veröffentlicht am

Kurze Einführung in Groovy

Veröffentlicht in: Technologie

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>

×