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

Like this? Share it with your network

Share

Groovy workshop à Mix-IT 2013

on

  • 823 views

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.

Statistics

Views

Total Views
823
Views on SlideShare
823
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Groovy workshop à Mix-IT 2013 Presentation 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