SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
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]

Contenu connexe

Tendances

JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJosé Paumard
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPjulien pauli
 
PHP #1 : introduction
PHP #1 : introductionPHP #1 : introduction
PHP #1 : introductionJean Michel
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHPAbdoulaye Dieng
 
Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Javajollivetc
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.netZakaria SMAHI
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesECAM Brussels Engineering School
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afupJulien Vinber
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresECAM Brussels Engineering School
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applicationsDamien Seguy
 
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
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scalaSOAT
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScripttarkan_
 

Tendances (20)

JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne Tour
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
PHP #1 : introduction
PHP #1 : introductionPHP #1 : introduction
PHP #1 : introduction
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 
Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Java
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.net
 
Formation python
Formation pythonFormation python
Formation python
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
 
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
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Change mind about JS
Change mind about JSChange mind about JS
Change mind about JS
 

En vedette

Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.Infinity
 
Groovy presentation
Groovy presentationGroovy presentation
Groovy presentationManav Prasad
 
Application Architectures in Grails
Application Architectures in GrailsApplication Architectures in Grails
Application Architectures in GrailsPeter Ledbrook
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Guillaume Laforge
 
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
 

En vedette (8)

Dynamic Languages
Dynamic LanguagesDynamic Languages
Dynamic Languages
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
Groovy presentation
Groovy presentationGroovy presentation
Groovy presentation
 
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
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008
 
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
 

Similaire à Présentation Groovy

Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyGuillaume Laforge
 
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
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage GoSylvain Wallez
 
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
 
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
 
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
 
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
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturiteRémi Alvado
 
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
 

Similaire à Présentation Groovy (20)

Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec 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 2011
 
Drools
DroolsDrools
Drools
 
Cours Ynov JS B1_1
Cours Ynov JS B1_1Cours Ynov JS B1_1
Cours Ynov JS B1_1
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage Go
 
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
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
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
 
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
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
 
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 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]