• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Groovy workshop à Mix-IT 2013
 

Groovy workshop à Mix-IT 2013

on

  • 767 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
767
Views on SlideShare
767
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 Groovy workshop à Mix-IT 2013 Presentation Transcript

    • 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 Gradle
    • http://gvmtool.net
    • InstallationdeGVM,GroovyetGradle• Installation de GVM• Installation de Groovy• Installtion de Gradlecurl  -­‐s  get.gvmtool.net  |  bashgvm  install  groovygvm  install  gradle
    • 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
    • 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  String  getName()  {                return  name;        }                public  void  setName(String  name)  {                this.name  =  name;        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name;        }}
    • 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 !
    • 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        }}
    • 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
    • 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        }}
    • 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
    • Unepersonne...sauceJava              class  Person  {        private  String  name                              String  getName()  {                              name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                              "Hello,  my  name  is  "  +  name        }}
    • 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
    • Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        }}
    • Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        }}Un langage sexyavec des GString
    • Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        }}
    • Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        }}Reformattons toutce beau bazar
    • Unepersonne...sauceGroovy!class  Person  {        String  name                String  greet()  {                "Hello,  my  name  is  ${name}"        }}
    • 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;        }}
    • Commentluifairedirebonjour...Person  person  =  new  Person();person.setName("Guillaume");System.out.println(person.greet());
    • Commentluifairedirebonjour...Person  person  =  new  Person();person.setName("Guillaume");System.out.println(person.greet());Sans points-virgules
    • Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")System.out.println(person.greet())
    • Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")System.out.println(person.greet())println versionraccourcie
    • Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")                      println(person.greet())
    • Commentluifairedirebonjour...Person  person  =  new  Person()person.setName("Guillaume")                      println(person.greet())sansparenthèses
    • Commentluifairedirebonjour...Person  person  =  new  Person()person.setName  "Guillaume"                      println  person.greet()  
    • Commentluifairedirebonjour...Person  person  =  new  Person()person.setName  "Guillaume"                      println  person.greet()  notation d’accèsaux propriétés
    • Commentluifairedirebonjour...Person  person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  
    • Commentluifairedirebonjour...Person  person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  typageoptionnel
    • Commentluifairedirebonjour...def        person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  
    • Commentluifairedirebonjour...def        person  =  new  Person()person.name  =    "Guillaume"                      println  person.greet()  constructeur avecparamètres nommés
    • Commentluifairedirebonjour...def        person  =  new  Person(name:  "Guillaume")                        println  person.greet()  
    • Commentluifairedirebonjour...def        person  =  new  Person(name:  "Guillaume")                        println  person.greet()  un petit coup dereformat pour les yeux
    • 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 ?• 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
    • Le défilé descollections
    • 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
    • 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
    • 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
    • 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
    • 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  *  2Assignationmultiple
    • 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
    • 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
    • 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  plugin:  groovyrepositories  {        mavenCentral()}dependencies  {        compile  org.codehaus.groovy:groovy-­‐all:2.1.3        testCompile                  org.spockframework:spock-­‐core:0.7-­‐groovy-­‐2.0}
    • 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 sourceJava & Groovy
    • CréerunprojetetappliquerlepluginGroovy• Créer quelques répertoires :• src/main/groovy• src/test/groovyNos fichiers sourceJava & GroovyPour découvrir leframeworkdetestSpock
    • 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/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