SlideShare una empresa de Scribd logo
1 de 43
Groovy
Qui je suis? ,[object Object],J’entretiens une relation extraconjugale avec Guillaume Laforge J’ai écrit un super bouquin sur Groovy Je siège sur l’ expert group  de la JSR-241 Je suis  committer  sur Groovy Jean-Sébastien Bournival Architecte de systèmes Nurun Mon blog:  http ://js.jipiju.com
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Partie 1:  Introduction Origines et principes de base
Introduction ,[object Object],[object Object],[object Object]
Introduction ,[object Object],[object Object],[object Object],[object Object],[object Object],Groovy Java Java Virtual Machine bytecode
Historique ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Installation ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Anatomie d’un script // monScript.groovy //  def maVariable = 3 def uneClosure = {  it * it } println ‘Bonjour monde!’ L’instruction return est optionnelle Packages importés par défaut: groovy.lang.* groovy.util.* java.lang.* java.util.* java.io.* java.net.* Java.math.BigDecimal Java.math.BigInteger Le point virgule et les paranthèses sont  optionnels System.out est implicite Ce script ne contient pas de classe:  lors de l’exécution, il sera enrobé dans la méthode run() d’un objet de type  Script
Partie 2:  Qu’est-ce que Groovy? Survol du langage
Type de données de base ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Types de données de base ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Expressions régulières ,[object Object],[object Object],[object Object],// java.util.regex.Pattern def pattern = ~/.ou/ // java.util.regex.Matcher def matcher = ('hibou pou chou genou' =~ pattern) assert matcher.size() == 4 assert  'hibou' ==~ /.*ou/
Structures de contrôle ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Structures de contrôle (2) ,[object Object],[object Object],[object Object],[object Object],def matcher = '12xy5' =~ // for (match in matcher) { println match } def myString = 'Saku Koivu' for (i in 0..<myString.size()) { ... }
Structures de contrôle (3) ,[object Object],switch (x) { case 7:  println &quot;7&quot;;  break;  case 2.3:  println &quot;2.3&quot;;  break; case &quot;dog&quot;:  println &quot;dog&quot;;  break; case [1, 2, 'alf']:  println &quot;in list&quot;;  break; case (3..6):  println &quot;in range&quot;;  break; case Integer:  println &quot;Integer&quot;;  break; case ~&quot;ca.*&quot;:  println &quot;regex&quot;;  break; }
GDK ,[object Object],java.io.File: eachLine (Closure closure) eachFile (Closure closure) java.util.Date: minus(int days) plus(int days) java.lang.String: toURL() java.util.Collection: count(Object value) find(Closure closure) findAll(Closure closure)
Support natif des collections ,[object Object],[object Object],[object Object],[object Object],def  sakuList = [] sakuList = ['fi','en'] sakuList << 'fr' assert sakuList instanceof java.util.List
Support natif des collections (2) ,[object Object],[object Object],[object Object],def sakuMap = [:] sakuMap = [ 'team':'mtl', 'goals':12, 'languages':['fi', 'en'] ] println sakuMap.team assert sakuMap instanceof java.util.Map
Support natif des collections (3) ,[object Object],[object Object],[object Object],[object Object],def range = 5..8 assert range.size() == 4 for (i in range) { println &quot;Hello ${i}&quot; }
Closures ,[object Object],[object Object],[object Object],(define (derivative f dx) (lambda (x) (/ (- (f (+ x dx)) (f x)) dx)))
Closures (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Programmation objet ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Programmation objet ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Programmation  META  objet ,[object Object],[object Object],[object Object],classe méta-classe appel de methode()
Partie 3:  Que fait-on avec Groovy? Applications concrètes du langage
Builders ,[object Object],[object Object],def builder = new MarkupBuilder() builder.'web-app' { 'display-name' 'My Webapp'  }   <web-app>  <display-name>My Webapp</display-name> </web-app>
Builders ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
XML ,[object Object],[object Object],[object Object],[object Object],[object Object],new XmlSlurper().parse(new File('C:/dev/data/file.xml'))
GSQL ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GANT ,[object Object],[object Object],[object Object],[object Object],target ( default : 'This is the default target.' ) { if (System.getenv ( ).'JAVA_HOME') { anotherTarget() } }
Services Web ,[object Object],[object Object],[object Object],[object Object],[object Object]
Services Web import groovyx.net.ws.WSClient  def proxy = new WSClient(&quot;http://localhost:6980/MathService?wsdl&quot;, this.class.classLoader)  def result = proxy.add(1.0 as double, 2.0 as double)   import groovyx.net.ws.WSServer  def server = new WSServer()  server.setNode(&quot;MathService&quot;, &quot;http://localhost:6980/MathService&quot;)   Serveur Client
Tester avec Groovy ,[object Object],[object Object],[object Object],[object Object],[object Object]
Tester avec Groovy ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Partie 4:  Conclusion La fin … vraiment?  Ou seulement le début?
State of the «groovy» nation ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Défis à venir ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Voir la lumière … ,[object Object],[object Object],[object Object],[object Object],[object Object]
Références ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],?
Références ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Références ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Des questions? Merci à tous [email_address]

Más contenido relacionado

La actualidad más candente

TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Jean-Michel Doudoux
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Julien Jakubowski
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturiteRémi Alvado
 
Android Optimisations Greendroid
Android Optimisations GreendroidAndroid Optimisations Greendroid
Android Optimisations GreendroidGDG Nantes
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Jean-Michel Doudoux
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Jean-Michel Doudoux
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)Julien CROUZET
 
Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Javajollivetc
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETMSDEVMTL
 

La actualidad más candente (20)

TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
 
Dynamic Languages
Dynamic LanguagesDynamic Languages
Dynamic Languages
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
The Future of Javascript
The Future of JavascriptThe Future of Javascript
The Future of Javascript
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
 
Android Optimisations Greendroid
Android Optimisations GreendroidAndroid Optimisations Greendroid
Android Optimisations Greendroid
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
La programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PFLa programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PF
 
Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Java
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NET
 

Destacado

Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.Infinity
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Application Architectures in Grails
Application Architectures in GrailsApplication Architectures in Grails
Application Architectures in GrailsPeter Ledbrook
 
Enib cours c.a.i. web - séance #5 : td grails
Enib   cours c.a.i. web - séance #5 : td grailsEnib   cours c.a.i. web - séance #5 : td grails
Enib cours c.a.i. web - séance #5 : td grailsHoracio Gonzalez
 
Grails Un Framework Web Agile
Grails Un Framework Web AgileGrails Un Framework Web Agile
Grails Un Framework Web AgileNabil Adouani
 

Destacado (6)

Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Introduction to Grails
Introduction to GrailsIntroduction to Grails
Introduction to Grails
 
Application Architectures in Grails
Application Architectures in GrailsApplication Architectures in Grails
Application Architectures in Grails
 
Enib cours c.a.i. web - séance #5 : td grails
Enib   cours c.a.i. web - séance #5 : td grailsEnib   cours c.a.i. web - séance #5 : td grails
Enib cours c.a.i. web - séance #5 : td grails
 
Grails Un Framework Web Agile
Grails Un Framework Web AgileGrails Un Framework Web Agile
Grails Un Framework Web Agile
 

Similar a Présentation Groovy

Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Aurélien Maury
 
Grails from scratch to prod - MixIT 2010
Grails from scratch to prod - MixIT 2010Grails from scratch to prod - MixIT 2010
Grails from scratch to prod - MixIT 2010Aurélien Maury
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015Stéphane Legrand
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture zaghir
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Jérôme Tamborini
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
ENIB 2013-2014 - CAI Web #3: Groovy
ENIB 2013-2014 - CAI Web #3: GroovyENIB 2013-2014 - CAI Web #3: Groovy
ENIB 2013-2014 - CAI Web #3: GroovyHoracio Gonzalez
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Jean-Michel Doudoux
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013Romain Linsolas
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Société ELOSI
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Martin Latrille
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejsnaholyr
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Yannick Chartois
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 

Similar a Présentation Groovy (20)

Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011
 
Drools
DroolsDrools
Drools
 
Cours Ynov JS B1_1
Cours Ynov JS B1_1Cours Ynov JS B1_1
Cours Ynov JS B1_1
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Grails from scratch to prod - MixIT 2010
Grails from scratch to prod - MixIT 2010Grails from scratch to prod - MixIT 2010
Grails from scratch to prod - MixIT 2010
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
Javavs net
Javavs netJavavs net
Javavs net
 
ENIB 2013-2014 - CAI Web #3: Groovy
ENIB 2013-2014 - CAI Web #3: GroovyENIB 2013-2014 - CAI Web #3: Groovy
ENIB 2013-2014 - CAI Web #3: Groovy
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejs
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 

Présentation Groovy

  • 2.
  • 3.
  • 4. Partie 1: Introduction Origines et principes de base
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. Anatomie d’un script // monScript.groovy // def maVariable = 3 def uneClosure = { it * it } println ‘Bonjour monde!’ L’instruction return est optionnelle Packages importés par défaut: groovy.lang.* groovy.util.* java.lang.* java.util.* java.io.* java.net.* Java.math.BigDecimal Java.math.BigInteger Le point virgule et les paranthèses sont optionnels System.out est implicite Ce script ne contient pas de classe: lors de l’exécution, il sera enrobé dans la méthode run() d’un objet de type Script
  • 10. Partie 2: Qu’est-ce que Groovy? Survol du langage
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26. Partie 3: Que fait-on avec Groovy? Applications concrètes du langage
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33. Services Web import groovyx.net.ws.WSClient def proxy = new WSClient(&quot;http://localhost:6980/MathService?wsdl&quot;, this.class.classLoader) def result = proxy.add(1.0 as double, 2.0 as double) import groovyx.net.ws.WSServer def server = new WSServer() server.setNode(&quot;MathService&quot;, &quot;http://localhost:6980/MathService&quot;) Serveur Client
  • 34.
  • 35.
  • 36. Partie 4: Conclusion La fin … vraiment? Ou seulement le début?
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43. Des questions? Merci à tous [email_address]