Groovy workshop à Mix-IT 2013
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Groovy workshop à Mix-IT 2013

  • 851 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
851
On Slideshare
851
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Groovy, les mainsdans le cambouisGuillaumeLaforgeGroovy Project ManagerSpringSource / VMware
  • 2. GuillaumeLaforge@glaforge http://glaforge.appspot.com http://gplus.to/glaforge 
  • 3. GVM, Groovy enVironment Managerpour installerfacilementGroovyGrails, Gradle, Griffon, Vert.xInstallation de GVM,Groovy et Gradle
  • 4. http://gvmtool.net
  • 5. InstallationdeGVM,GroovyetGradle• Installation de GVM• Installation de Groovy• Installtion de Gradlecurl  -­‐s  get.gvmtool.net  |  bashgvm  install  groovygvm  install  gradle
  • 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. Quelques bases,pour apprendre GroovyA la découvertede Groovy...
  • 8. L’artillerieGroovy-esqueCommande groovyCompilateur groovycREPL groovyshConsole Swing groovyConsole
  • 9. « Groovy, c’estcomme Java,mais sansle costumetrois pièces »
  • 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. 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. 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. 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. 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. 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. 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. 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. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        }}
  • 19. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        }}Un langage sexyavec des GString
  • 20. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        }}
  • 21. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        }}Reformattons toutce beau bazar
  • 22. Unepersonne...sauceGroovy!class  Person  {        String  name                String  greet()  {                "Hello,  my  name  is  ${name}"        }}
  • 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. Commentluifairedirebonjour...Person  person  =  new  Person();person.setName("Guillaume");System.out.println(person.greet());
  • 25. Commentluifairedirebonjour...Person  person  =  new  Person();person.setName("Guillaume");System.out.println(person.greet());Sans points-virgules
  • 26. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")System.out.println(person.greet())
  • 27. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")System.out.println(person.greet())println versionraccourcie
  • 28. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")                      println(person.greet())
  • 29. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")                      println(person.greet())sansparenthèses
  • 30. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName  "Guillaume"                      println  person.greet()  
  • 31. Commentluifairedirebonjour...Person  person  =  new  Person()person.setName  "Guillaume"                      println  person.greet()  notation d’accèsaux propriétés
  • 32. Commentluifairedirebonjour...Person  person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  
  • 33. Commentluifairedirebonjour...Person  person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  typageoptionnel
  • 34. Commentluifairedirebonjour...def        person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  
  • 35. Commentluifairedirebonjour...def        person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  constructeur avecparamètres nommés
  • 36. Commentluifairedirebonjour...def        person  =  new  Person(name:  "Guillaume")                        println  person.greet()  
  • 37. Commentluifairedirebonjour...def        person  =  new  Person(name:  "Guillaume")                        println  person.greet()  un petit coup dereformat pour les yeux
  • 38. Commentluifairedirebonjour...def  person  =  new  Person(name:  "Guillaume")println  person.greet()  
  • 39. On va sefaire la cloture...
  • 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. Le défilé descollections
  • 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. 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. 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. 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. Vousavezvule«powerassert»deGroovy?def  (e,  m,  c)  =  [123,  1,  3e9]assert  e  ==  m  *  c  *  2
  • 47. Vousavezvule«powerassert»deGroovy?def  (e,  m,  c)  =  [123,  1,  3e9]assert  e  ==  m  *  c  *  2Assignationmultiple
  • 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. 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. Lamagiede la méta-programmation
  • 51. Créer un projetGradleUtiliser le pluginGroovyBon, ben...c’est parti !
  • 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. CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovy
  • 54. CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovyNos fichiers sourceJava & Groovy
  • 55. CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovyNos fichiers sourceJava & GroovyPour découvrir leframeworkdetestSpock
  • 56. CréerunprojetetappliquerlepluginGroovy• Lister les tâches disponibles :$  gradle  tasks
  • 57. Pour tester etbuilder notre projet
  • 58. Pour tester etbuilder notre projetGénérer ladocumentation
  • 59. Pour tester etbuilder notre projetGénérer ladocumentationPour lancerles tests
  • 60. Pour tester etbuilder notre projetGénérer ladocumentationPour lancerles testsFaire un peule ménage
  • 61. Spock :Enterprise testframework
  • 62. Questions&Réponses
  • 63. Merci!@glaforge http://glaforge.appspot.com http://gplus.to/glaforge 
  • 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