Groovy, les mainsdans le cambouisGuillaumeLaforgeGroovy Project ManagerSpringSource / VMware
GuillaumeLaforge@glaforge http://glaforge.appspot.com http://gplus.to/glaforge 
GVM, Groovy enVironment Managerpour installerfacilementGroovyGrails, Gradle, Griffon, Vert.xInstallation de GVM,Groovy et ...
http://gvmtool.net
InstallationdeGVM,GroovyetGradle• Installation de GVM• Installation de Groovy• Installtion de Gradlecurl	  -­‐s	  get.gvmt...
Vérifiezvotreinstallation$	  groovy	  -­‐-­‐versionGroovy	  Version:	  2.1.3	  JVM:	  1.7.0_09	  Vendor:	  Oracle	  Corpor...
Quelques bases,pour apprendre GroovyA la découvertede Groovy...
L’artillerieGroovy-esqueCommande groovyCompilateur groovycREPL groovyshConsole Swing groovyConsole
« Groovy, c’estcomme Java,mais sansle costumetrois pièces »
Unepersonne...sauceJavapublic	  class	  Person	  {	  	  	  	  private	  String	  name;	  	  	  	  	  	  	  	  public	  Str...
Unepersonne...sauceJavapublic	  class	  Person	  {	  	  	  	  private	  String	  name;	  	  	  	  	  	  	  	  public	  Str...
Unepersonne...sauceJavapublic	  class	  Person	  {	  	  	  	  private	  String	  name	  	  	  	  	  	  	  	  public	  Stri...
Unepersonne...sauceJavapublic	  class	  Person	  {	  	  	  	  private	  String	  name	  	  	  	  	  	  	  	  public	  Stri...
Unepersonne...sauceJava	  	  	  	  	  	  	  class	  Person	  {	  	  	  	  private	  String	  name	  	  	  	  	  	  	  	  	...
Unepersonne...sauceJava	  	  	  	  	  	  	  class	  Person	  {	  	  	  	  private	  String	  name	  	  	  	  	  	  	  	  	...
Unepersonne...sauceJava	  	  	  	  	  	  	  class	  Person	  {	  	  	  	  private	  String	  name	  	  	  	  	  	  	  	  	...
Unepersonne...sauceJava	  	  	  	  	  	  	  class	  Person	  {	  	  	  	  private	  String	  name	  	  	  	  	  	  	  	  	...
Unepersonne...sauceJava	  	  	  	  	  	  	  class	  Person	  {	  	  	  	  	  	  	  	  	  	  	  	  String	  name	  	  	  	 ...
Unepersonne...sauceJava	  	  	  	  	  	  	  class	  Person	  {	  	  	  	  	  	  	  	  	  	  	  	  String	  name	  	  	  	 ...
Unepersonne...sauceJava	  	  	  	  	  	  	  class	  Person	  {	  	  	  	  	  	  	  	  	  	  	  	  String	  name	  	  	  	 ...
Unepersonne...sauceJava	  	  	  	  	  	  	  class	  Person	  {	  	  	  	  	  	  	  	  	  	  	  	  String	  name	  	  	  	 ...
Unepersonne...sauceGroovy!class	  Person	  {	  	  	  	  String	  name	  	  	  	  	  	  	  	  String	  greet()	  {	  	  	  ...
Unepersonne...sauceGroovy!class	  Person	  {	  	  	  	  String	  name	  	  	  	  	  	  	  	  String	  greet()	  {	  	  	  ...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person();person.setName("Guillaume");System.out.println(person.gr...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person();person.setName("Guillaume");System.out.println(person.gr...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person()person.setName("Guillaume")System.out.println(person.gree...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person()person.setName("Guillaume")System.out.println(person.gree...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person()person.setName("Guillaume")	  	  	  	  	  	  	  	  	  	  ...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person()person.setName("Guillaume")	  	  	  	  	  	  	  	  	  	  ...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person()person.setName	  "Guillaume"	  	  	  	  	  	  	  	  	  	 ...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person()person.setName	  "Guillaume"	  	  	  	  	  	  	  	  	  	 ...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person()person.name	  =	  	  "Guillaume"	  	  	  	  	  	  	  	  	...
Commentluifairedirebonjour...Person	  person	  =	  new	  Person()person.name	  =	  	  "Guillaume"	  	  	  	  	  	  	  	  	...
Commentluifairedirebonjour...def	  	  	  	  person	  =	  new	  Person()person.name	  =	  	  "Guillaume"	  	  	  	  	  	  	...
Commentluifairedirebonjour...def	  	  	  	  person	  =	  new	  Person()person.name	  =	  	  "Guillaume"	  	  	  	  	  	  	...
Commentluifairedirebonjour...def	  	  	  	  person	  =	  new	  Person(name:	  "Guillaume")	  	  	  	  	  	  	  	  	  	  	 ...
Commentluifairedirebonjour...def	  	  	  	  person	  =	  new	  Person(name:	  "Guillaume")	  	  	  	  	  	  	  	  	  	  	 ...
Commentluifairedirebonjour...def	  person	  =	  new	  Person(name:	  "Guillaume")println	  person.greet()	  
On va sefaire la cloture...
Closures—ou«clotures»• Pas besoin d’attendre JDK 8 en 2014• Groovy a des closures depuis 2003 !• C’est quoi une closure ?•...
Le défilé descollections
Syntaxespécialepourlescollectionsdef	  list	  =	  [1,	  2,	  4,	  a,	  b,	  c]assert	  list[3]	  ==	  alist	  <<	  dassert...
Syntaxespécialepourlescollectionsdef	  list	  =	  [1,	  2,	  4,	  a,	  b,	  c]assert	  list[3]	  ==	  alist	  <<	  dassert...
Syntaxespécialepourlescollectionsdef	  list	  =	  [1,	  2,	  4,	  a,	  b,	  c]assert	  list[3]	  ==	  alist	  <<	  dassert...
Syntaxespécialepourlescollectionsdef	  list	  =	  [1,	  2,	  4,	  a,	  b,	  c]assert	  list[3]	  ==	  alist	  <<	  dassert...
Vousavezvule«powerassert»deGroovy?def	  (e,	  m,	  c)	  =	  [123,	  1,	  3e9]assert	  e	  ==	  m	  *	  c	  *	  2
Vousavezvule«powerassert»deGroovy?def	  (e,	  m,	  c)	  =	  [123,	  1,	  3e9]assert	  e	  ==	  m	  *	  c	  *	  2Assignatio...
Vousavezvule«powerassert»deGroovy?def	  (e,	  m,	  c)	  =	  [123,	  1,	  3e9]assert	  e	  ==	  m	  *	  c	  *	  2Assertion	...
Vousavezvule«powerassert»deGroovy?def	  (e,	  m,	  c)	  =	  [123,	  1,	  3e9]assert	  e	  ==	  m	  *	  c	  *	  2Assertion	...
Lamagiede la méta-programmation
Créer un projetGradleUtiliser le pluginGroovyBon, ben...c’est parti !
CréerunprojetetappliquerlepluginGroovy• Dans un nouveau répertoire projet,créer un fichier build.gradle, contenant :apply	 ...
CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovy
CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovyNos fichiers sourceJ...
CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovyNos fichiers sourceJ...
CréerunprojetetappliquerlepluginGroovy• Lister les tâches disponibles :$	  gradle	  tasks
Pour tester etbuilder notre projet
Pour tester etbuilder notre projetGénérer ladocumentation
Pour tester etbuilder notre projetGénérer ladocumentationPour lancerles tests
Pour tester etbuilder notre projetGénérer ladocumentationPour lancerles testsFaire un peule ménage
Spock :Enterprise testframework
Questions&Réponses
Merci!@glaforge http://glaforge.appspot.com http://gplus.to/glaforge 
Créditsimages• canonhttp://uponamidnightdreary.com/wp-content/uploads/2011/12/AR22442.jpg• costumehttp://cdn2.kebello.com/...
Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013
Groovy workshop à Mix-IT 2013
Upcoming SlideShare
Loading in...5
×

Groovy workshop à Mix-IT 2013

780

Published on

Quelques slides de présentation lors du workshop Groovy à la conférence Mix-IT à Lyon, en 2013.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
780
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Groovy workshop à Mix-IT 2013

  1. 1. Groovy, les mainsdans le cambouisGuillaumeLaforgeGroovy Project ManagerSpringSource / VMware
  2. 2. GuillaumeLaforge@glaforge http://glaforge.appspot.com http://gplus.to/glaforge 
  3. 3. GVM, Groovy enVironment Managerpour installerfacilementGroovyGrails, Gradle, Griffon, Vert.xInstallation de GVM,Groovy et Gradle
  4. 4. http://gvmtool.net
  5. 5. InstallationdeGVM,GroovyetGradle• Installation de GVM• Installation de Groovy• Installtion de Gradlecurl  -­‐s  get.gvmtool.net  |  bashgvm  install  groovygvm  install  gradle
  6. 6. Vérifiezvotreinstallation$  groovy  -­‐-­‐versionGroovy  Version:  2.1.3  JVM:  1.7.0_09  Vendor:  Oracle  Corporation  OS:  Mac  OS  X$  gradle  -­‐-­‐version-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐Gradle  1.5-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐Gradle  build  time:  mercredi  27  mars  2013  13  h  51  UTCGroovy:  1.8.6Ant:  Apache  Ant(TM)  version  1.8.4  compiled  on  May  22  2012Ivy:  2.2.0JVM:  1.7.0_09  (Oracle  Corporation  23.5-­‐b02)OS:  Mac  OS  X  10.8.3  x86_64
  7. 7. Quelques bases,pour apprendre GroovyA la découvertede Groovy...
  8. 8. L’artillerieGroovy-esqueCommande groovyCompilateur groovycREPL groovyshConsole Swing groovyConsole
  9. 9. « Groovy, c’estcomme Java,mais sansle costumetrois pièces »
  10. 10. Unepersonne...sauceJavapublic  class  Person  {        private  String  name;                public  String  getName()  {                return  name;        }                public  void  setName(String  name)  {                this.name  =  name;        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name;        }}
  11. 11. Unepersonne...sauceJavapublic  class  Person  {        private  String  name;                public  String  getName()  {                return  name;        }                public  void  setName(String  name)  {                this.name  =  name;        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name;        }}Les points-virgules,c’est pour les Mickeys !
  12. 12. Unepersonne...sauceJavapublic  class  Person  {        private  String  name                public  String  getName()  {                return  name        }                public  void  setName(String  name)  {                this.name  =  name        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name        }}
  13. 13. Unepersonne...sauceJavapublic  class  Person  {        private  String  name                public  String  getName()  {                return  name        }                public  void  setName(String  name)  {                this.name  =  name        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name        }}En Groovy, la visitbilitéest public par défaut
  14. 14. Unepersonne...sauceJava              class  Person  {        private  String  name                              String  getName()  {                return  name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                return  "Hello,  my  name  is  "  +  name        }}
  15. 15. Unepersonne...sauceJava              class  Person  {        private  String  name                              String  getName()  {                return  name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                return  "Hello,  my  name  is  "  +  name        }}Le return aussiest optionnel
  16. 16. Unepersonne...sauceJava              class  Person  {        private  String  name                              String  getName()  {                              name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                              "Hello,  my  name  is  "  +  name        }}
  17. 17. Unepersonne...sauceJava              class  Person  {        private  String  name                              String  getName()  {                              name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                              "Hello,  my  name  is  "  +  name        }}Groovy a la notionde propriétés
  18. 18. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        }}
  19. 19. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        }}Un langage sexyavec des GString
  20. 20. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        }}
  21. 21. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        }}Reformattons toutce beau bazar
  22. 22. Unepersonne...sauceGroovy!class  Person  {        String  name                String  greet()  {                "Hello,  my  name  is  ${name}"        }}
  23. 23. Unepersonne...sauceGroovy!class  Person  {        String  name                String  greet()  {                "Hello,  my  name  is  ${name}"        }}public  class  Person  {        private  String  name;                public  String  getName()  {                return  name;        }                public  void  setName(String  name)  {                this.name  =  name;        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name;        }}
  24. 24. Commentluifairedirebonjour...Person  person  =  new  Person();person.setName("Guillaume");System.out.println(person.greet());
  25. 25. Commentluifairedirebonjour...Person  person  =  new  Person();person.setName("Guillaume");System.out.println(person.greet());Sans points-virgules
  26. 26. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")System.out.println(person.greet())
  27. 27. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")System.out.println(person.greet())println versionraccourcie
  28. 28. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")                      println(person.greet())
  29. 29. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")                      println(person.greet())sansparenthèses
  30. 30. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName  "Guillaume"                      println  person.greet()  
  31. 31. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName  "Guillaume"                      println  person.greet()  notation d’accèsaux propriétés
  32. 32. Commentluifairedirebonjour...Person  person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  
  33. 33. Commentluifairedirebonjour...Person  person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  typageoptionnel
  34. 34. Commentluifairedirebonjour...def        person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  
  35. 35. Commentluifairedirebonjour...def        person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  constructeur avecparamètres nommés
  36. 36. Commentluifairedirebonjour...def        person  =  new  Person(name:  "Guillaume")                        println  person.greet()  
  37. 37. Commentluifairedirebonjour...def        person  =  new  Person(name:  "Guillaume")                        println  person.greet()  un petit coup dereformat pour les yeux
  38. 38. Commentluifairedirebonjour...def  person  =  new  Person(name:  "Guillaume")println  person.greet()  
  39. 39. On va sefaire la cloture...
  40. 40. Closures—ou«clotures»• Pas besoin d’attendre JDK 8 en 2014• Groovy a des closures depuis 2003 !• C’est quoi une closure ?• bloc de code réutilisable• assignable dans une variable• qu’on peut passer en paramètre d’une méthode• pouvant prendre des arguments• y compris des valeurs par défaut
  41. 41. Le défilé descollections
  42. 42. Syntaxespécialepourlescollectionsdef  list  =  [1,  2,  4,  a,  b,  c]assert  list[3]  ==  alist  <<  dassert  list[6]  ==  ddef  range  =  1..10assert  range.size()  ==  10def  map  =  [a:  1,  b:  2,  c:  3]assert  map[b]  ==  2assert  map.b  ==  2map[d]  =  Mixmap.e  =  ITassert  [map.d,  map[e]].join(-­‐)  ==  Mix-­‐IT
  43. 43. Syntaxespécialepourlescollectionsdef  list  =  [1,  2,  4,  a,  b,  c]assert  list[3]  ==  alist  <<  dassert  list[6]  ==  ddef  range  =  1..10assert  range.size()  ==  10def  map  =  [a:  1,  b:  2,  c:  3]assert  map[b]  ==  2assert  map.b  ==  2map[d]  =  Mixmap.e  =  ITassert  [map.d,  map[e]].join(-­‐)  ==  Mix-­‐ITListe
  44. 44. Syntaxespécialepourlescollectionsdef  list  =  [1,  2,  4,  a,  b,  c]assert  list[3]  ==  alist  <<  dassert  list[6]  ==  ddef  range  =  1..10assert  range.size()  ==  10def  map  =  [a:  1,  b:  2,  c:  3]assert  map[b]  ==  2assert  map.b  ==  2map[d]  =  Mixmap.e  =  ITassert  [map.d,  map[e]].join(-­‐)  ==  Mix-­‐ITListeRange
  45. 45. Syntaxespécialepourlescollectionsdef  list  =  [1,  2,  4,  a,  b,  c]assert  list[3]  ==  alist  <<  dassert  list[6]  ==  ddef  range  =  1..10assert  range.size()  ==  10def  map  =  [a:  1,  b:  2,  c:  3]assert  map[b]  ==  2assert  map.b  ==  2map[d]  =  Mixmap.e  =  ITassert  [map.d,  map[e]].join(-­‐)  ==  Mix-­‐ITListeRangeMap
  46. 46. Vousavezvule«powerassert»deGroovy?def  (e,  m,  c)  =  [123,  1,  3e9]assert  e  ==  m  *  c  *  2
  47. 47. Vousavezvule«powerassert»deGroovy?def  (e,  m,  c)  =  [123,  1,  3e9]assert  e  ==  m  *  c  *  2Assignationmultiple
  48. 48. Vousavezvule«powerassert»deGroovy?def  (e,  m,  c)  =  [123,  1,  3e9]assert  e  ==  m  *  c  *  2Assertion  failed:  assert  e  ==  m  *  c  *  2              |  |    |  |  |  |              |  |    1  |  |  6E+9              |  false|  3E+9              123        3E+9Assignationmultiple
  49. 49. Vousavezvule«powerassert»deGroovy?def  (e,  m,  c)  =  [123,  1,  3e9]assert  e  ==  m  *  c  *  2Assertion  failed:  assert  e  ==  m  *  c  *  2              |  |    |  |  |  |              |  |    1  |  |  6E+9              |  false|  3E+9              123        3E+9Toutes lesvaleurs dessous-expressionsAssignationmultiple
  50. 50. Lamagiede la méta-programmation
  51. 51. Créer un projetGradleUtiliser le pluginGroovyBon, ben...c’est parti !
  52. 52. CréerunprojetetappliquerlepluginGroovy• Dans un nouveau répertoire projet,créer un fichier build.gradle, contenant :apply  plugin:  groovyrepositories  {        mavenCentral()}dependencies  {        compile  org.codehaus.groovy:groovy-­‐all:2.1.3        testCompile                  org.spockframework:spock-­‐core:0.7-­‐groovy-­‐2.0}
  53. 53. CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovy
  54. 54. CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovyNos fichiers sourceJava & Groovy
  55. 55. CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovyNos fichiers sourceJava & GroovyPour découvrir leframeworkdetestSpock
  56. 56. CréerunprojetetappliquerlepluginGroovy• Lister les tâches disponibles :$  gradle  tasks
  57. 57. Pour tester etbuilder notre projet
  58. 58. Pour tester etbuilder notre projetGénérer ladocumentation
  59. 59. Pour tester etbuilder notre projetGénérer ladocumentationPour lancerles tests
  60. 60. Pour tester etbuilder notre projetGénérer ladocumentationPour lancerles testsFaire un peule ménage
  61. 61. Spock :Enterprise testframework
  62. 62. Questions&Réponses
  63. 63. Merci!@glaforge http://glaforge.appspot.com http://gplus.to/glaforge 
  64. 64. Créditsimages• canonhttp://uponamidnightdreary.com/wp-content/uploads/2011/12/AR22442.jpg• costumehttp://cdn2.kebello.com/8235-thickbox/costume-3-pieces-ref-patrick.jpg• mickeyhttp://4.bp.blogspot.com/-i9hzB7QYgq4/To9UufDo5dI/AAAAAAAAB2g/lKHHMm-KC68/s1600/f787ec3b56c3bd76_mickey-mouse.jpg• gstringhttp://cdnb.lystit.com/photos/2012/11/23/dg-noir-gstring-product-1-5588280-166851249_large_flex.jpeg• défiléhttp://www.lesreceptionstendances.com/wp-content/uploads/2012/07/organiser-un-d%C3%A9fil%C3%A9-de-mode-4.jpg• fantasiahttp://images.wikia.com/disney/images/d/d8/Fantasia-disneyscreencaps.com-2363.jpg• Spockhttp://images1.fanpop.com/images/photos/2500000/Zachary-Quinto-Spock-star-trek-2597267-2560-1921.jpg• cloturehttp://www.lusitane.fr/Userfiles/image/cloture-beton-pedra%20(17).JPG
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×