groovy für java programmierer - tu braunschweig · 2016-10-28 · • anpassen des groovy...
TRANSCRIPT
![Page 1: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/1.jpg)
20. Juli 2015
Groovy für Java Programmierer
Stefan Kolatzki
![Page 2: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/2.jpg)
• Karriere bei LINEAS
• Groovy für Java Programmierer
• Closures
• Literale, Operatoren, Operatoren überladen
• Extensions
• Compilerverhalten erweitern
• Domain Specific Languages
• Live Demo
Übersicht
![Page 3: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/3.jpg)
Karriere bei LINEAS
![Page 4: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/4.jpg)
• IT-Dienstleister und Software- und
Beratungshaus in Niedersachsen
• Standorte in Braunschweig und Wolfsburg
• ca. 100 Mitarbeiter
• hoher qualitativer Anspruch in allen
Bereichen mit maßgeschneiderten,
zukunftssicheren und integrierten Lösungen
• hochqualifizierte Mitarbeiter durch
kontinuierliche Weiterbildung und
Zertifizierung
• neueste Technologien um bestmögliche
Ergebnisse und hohen Kundennutzen zu
erzielen
Wir über uns
![Page 5: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/5.jpg)
Kunden
![Page 6: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/6.jpg)
• Flache Hierarchien und ein familiäres
Arbeitsumfeld
• Individuelle Entwicklungsmöglichkeiten
• Regelmäßige Feedbackgespräche
• Unbefristete Arbeitsverträge
• Dienstwagenmodelle
• Fitnessstudiozuschüsse und Massagen
• Gemeinsame Betriebsfeiern und Events
• Montags frisches Obst, Freitags Süssigkeiten
• Kaffee, Tee, Wasser …
Karriere
Softwareentwickler Java
Softwareentwickler Grails / AngularJs
Softwareentwickler C / C++
![Page 7: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/7.jpg)
LINEAS Informationstechnik GmbH
Theodor-Heuss-Str. 2
38122 Braunschweig
Telefon +49 (531) 8852 0
Web: www.lineas.de
Victoria Mahler, Personalleiterin
+49 (531) 8852 - 1124
Kontakt
![Page 8: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/8.jpg)
Groovyfür Java Programmierer
![Page 9: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/9.jpg)
„Groovy ist wie Java,
nur ohne das
Semikolon.“
;
Unbekannt
![Page 10: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/10.jpg)
Danke für ihre
Aufmerksamkeit
![Page 11: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/11.jpg)
• Dynamische Programmiersprache
• Dynamische Typisierung (def als dynamischer Typ)
• Typinferenz mit Flussanalysen (if(user instanceof User){...})
• Erweiterte Methodensuche beim Aufruf
• Aufruf von undefinierten Methoden
• JVM als Zielplattform
• Superset von Java (mit kleinen Einschränkungen)
• Funktionale Aspekte
• Funktionen höherer Ordnung
• Rekursion
• Typinferenz
• Operationen auf Listen
Groovy
![Page 12: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/12.jpg)
• Funktion mit Zugriff auf den Erstellungskontext
• Als Funktion höherer Ordnung nutzbar
• Beispiel:
int value = 5
def cFun = { int add ->
return value + add
}
assert cFun(10)==15
Closures
![Page 13: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/13.jpg)
• Listen / Mengen
• List<String> values = ["C++", "Java", "C#"]
• Set<String> values = ["C++", "Java", "C#"]
• Maps
• Map<String,Integer> values = ["C++":4, "Java":5, "C#": 3]
• Wertebereiche
• List<Integer> values = 5..9 //==[5,6,7,8,9]
• List<Integer> values = 5..<9 //==[5,6,7,8]
• Strings
• String javaString = 'Dies ist ein normaler Java String.'
• String interpolated = "String mit Werten: ${values}."
• String multiLine = """String über mehrere Zeilen."""
Zusätzliche Literale (Auswahl)
![Page 14: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/14.jpg)
• N-te Potenz
• int value = 2**3 // == 8
• Elvis Operator
• String value = name ?: "John" // name ? name : "John"
• Safe Navigation
• String value = user?.name
• Spread Operator
• List<String> names = users*.getName()
• Spaceship
• int compare = 1 <=> 1 // == 0
• int compare = 'a' <=> 'z' // == -1
• Subscript
• User user = users[3] // user instanceof List<User>
Zusätzliche Operatoren (Auswahl)
![Page 15: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/15.jpg)
• Mapping von Operatoren auf Funktionsnamen
class Complex{
Complex negative(){…}
Complex plus(final Complex value){…}
Complex minus(final Complex value){…}
...
}
void test(Complex a, Complex b){
Complex c = -a
Complex d = a + b
Complex e = b - d
...
}
Operatoren überladen
![Page 16: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/16.jpg)
• Erweiterungen für existierende Klassen
• Statische und Instanzmethoden möglich
• Registrierung in META-INF Beschreibungsdatei
• Extensions in Groovy Runtime
• Collections
• collect()
• Streams
• …
• Beispiel:
static <T> T sample(final Collection<T> self) {
final int index = new Random().nextInt(self.size())
return (self as List).get(index)
}
Extensions
![Page 17: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/17.jpg)
• Anpassen des Groovy Compileverhaltens per Annotationen
• Compile-Time Metaprogramming
• Eingebaute Umformungen in Groovy
• @groovy.transform.ToString
• @groovy.lang.Singleton
• @groovy.util.logging.Commons
• @groovy.transform.CompileStatic
• …
• Direkter Zugriff auf abstrakten Syntaxbaum
• Einordnung der Umwandlung zu Compilerphase
• Beispiel
• Spock DataDriven Testing
• Grails Domain-Klassen / Services
Compilerverhalten erweitern
![Page 18: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/18.jpg)
email {
from '[email protected]'
subject 'Hire me…'
body { p 'Hi there. I'am a …' }
}
Verwendet Methoden von
class EmailSpec {
void from(String from) { println "From: $from"}
void to(String... to) { println "To: $to"}
void subject(String subject) { println "Subject: $subject"}
void body(Closure body) {
def bodySpec = new BodySpec()
def code = body.rehydrate(bodySpec, this, this)
code.resolveStrategy = Closure.DELEGATE_ONLY
code()
}
}
Domain Specific Languages
![Page 19: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/19.jpg)
• Traits (Interfaces mit Implementierungen)
• Standard Sichtbarkeit ist public
• Mischen von Groovy und Java Klassen
• Erweiterte Typumwandlung
• Typen müssen nicht zwingend Zuweisungskompatibel sein
• Coercion Operator (… as <TYPE>)
• list as Set
• 5 as String
• Feldzugriff über (generierte) Getter + Setter
• user.name übersetzt zu user.getName()
• Vergleichsoperator == verwendet equals Methode
• Methodenüberladungen mit Default-Werten
• Letzter Ausdruck einer Methode/Closure ist Rückgabewert
• …
Weiteres
![Page 20: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/20.jpg)
Live Demo
![Page 21: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/21.jpg)
• Pros
• Weniger Code
• Funktionale Programmierung
• Schnellere Entwicklung
• Flexibel Erweiterbar
• Cons
• Fehleranfälliger durch dynamische Typisierung
• Etwas langsamer als Java
• Debugging von dynamischen Funktionsaufrufen schwierig
Pros und Cons
![Page 22: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/22.jpg)
Danke für ihre
Aufmerksamkeit
![Page 23: Groovy für Java Programmierer - TU Braunschweig · 2016-10-28 · • Anpassen des Groovy Compileverhaltens per Annotationen • Compile-Time Metaprogramming • Eingebaute Umformungen](https://reader033.vdocuments.mx/reader033/viewer/2022053014/5f135dc16d221b1572106404/html5/thumbnails/23.jpg)
• Groovy
• http://groovy-lang.org
• "Mazes for Programmers"
• James Buck
• The Pragmatic Programmers, LLC. 30.06.2015
• Spock Framework
• http://spockframework.org
• The Grails Framework
• http://grails.org
• Gradle
• https://gradle.org
Quellen