Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Groovy Workshop à Mix-IT 2013

Groovy Workshop à Mix-IT 2013

Guillaume Laforge

April 29, 2013
Tweet

More Decks by Guillaume Laforge

Other Decks in Programming

Transcript

  1. GVM, Groovy enVironment Manager pour installer facilement Groovy Grails, Gradle,

    Griffon, Vert.x Installation de GVM, Groovy et Gradle
  2. Installation de GVM, Groovy et Gradle • Installation de GVM

    • Installation de Groovy • Installtion de Gradle curl  -­‐s  get.gvmtool.net  |  bash gvm  install  groovy gvm  install  gradle
  3. Vérifiez votre installation $  groovy  -­‐-­‐version Groovy  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  UTC Groovy:  1.8.6 Ant:  Apache  Ant(TM)  version  1.8.4  compiled  on  May  22  2012 Ivy:  2.2.0 JVM:  1.7.0_09  (Oracle  Corporation  23.5-­‐b02) OS:  Mac  OS  X  10.8.3  x86_64
  4. Une personne... sauce Java 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;        } }
  5. Une personne... sauce Java 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;        } } Les points-virgules, c’est pour les Mickeys !
  6. Une personne... sauce Java 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        } }
  7. Une personne... sauce Java 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        } } En Groovy, la visitbilité est public par défaut
  8. Une personne... sauce Java            

     class  Person  {        private  String  name                              String  getName()  {                return  name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                return  "Hello,  my  name  is  "  +  name        } }
  9. Une personne... sauce Java            

     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 aussi est optionnel
  10. Une personne... sauce Java            

     class  Person  {        private  String  name                              String  getName()  {                              name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                              "Hello,  my  name  is  "  +  name        } }
  11. Une personne... sauce Java            

     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 notion de propriétés
  12. Une personne... sauce Java            

     class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        } }
  13. Une personne... sauce Java            

     class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        } } Un langage sexy avec des GString
  14. Une personne... sauce Java            

     class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        } }
  15. Une personne... sauce Java            

     class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        } } Reformattons tout ce beau bazar
  16. Une personne... sauce Groovy ! class  Person  {    

       String  name                String  greet()  {                "Hello,  my  name  is  ${name}"        } }
  17. Une personne... sauce Groovy ! 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;        } }
  18. Comment lui faire dire bonjour... Person  person  =  new  Person();

    person.setName("Guillaume"); System.out.println(person.greet());
  19. Comment lui faire dire bonjour... Person  person  =  new  Person();

    person.setName("Guillaume"); System.out.println(person.greet()); Sans points- virgules
  20. Comment lui faire dire bonjour... Person  person  =  new  Person()

    person.setName("Guillaume") System.out.println(person.greet())
  21. Comment lui faire dire bonjour... Person  person  =  new  Person()

    person.setName("Guillaume") System.out.println(person.greet()) println version raccourcie
  22. Comment lui faire dire bonjour... Person  person  =  new  Person()

    person.setName("Guillaume")                      println(person.greet())
  23. Comment lui faire dire bonjour... Person  person  =  new  Person()

    person.setName("Guillaume")                      println(person.greet()) sans parenthèses
  24. Comment lui faire dire bonjour... Person  person  =  new  Person()

    person.setName  "Guillaume"                      println  person.greet()  
  25. Comment lui faire dire bonjour... Person  person  =  new  Person()

    person.setName  "Guillaume"                      println  person.greet()   notation d’accès aux propriétés
  26. Comment lui faire dire bonjour... Person  person  =  new  Person()

    person.name  =    "Guillaume"                      println  person.greet()  
  27. Comment lui faire dire bonjour... Person  person  =  new  Person()

    person.name  =    "Guillaume"                      println  person.greet()   typage optionnel
  28. Comment lui faire dire bonjour... def        person

     =  new  Person() person.name  =    "Guillaume"                      println  person.greet()  
  29. Comment lui faire dire bonjour... def        person

     =  new  Person() person.name  =    "Guillaume"                      println  person.greet()   constructeur avec paramètres nommés
  30. Comment lui faire dire bonjour... def        person

     =  new  Person(name:  "Guillaume")                        println  person.greet()  
  31. Comment lui faire dire bonjour... def        person

     =  new  Person(name:  "Guillaume")                        println  person.greet()   un petit coup de reformat pour les yeux
  32. 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
  33. Syntaxe spéciale pour les collections def  list  =  [1,  2,

     4,  'a',  'b',  'c'] assert  list[3]  ==  'a' list  <<  'd' assert  list[6]  ==  'd' def  range  =  1..10 assert  range.size()  ==  10 def  map  =  [a:  1,  b:  2,  c:  3] assert  map['b']  ==  2 assert  map.b  ==  2 map['d']  =  'Mix' map.e  =  'IT' assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT'
  34. Syntaxe spéciale pour les collections def  list  =  [1,  2,

     4,  'a',  'b',  'c'] assert  list[3]  ==  'a' list  <<  'd' assert  list[6]  ==  'd' def  range  =  1..10 assert  range.size()  ==  10 def  map  =  [a:  1,  b:  2,  c:  3] assert  map['b']  ==  2 assert  map.b  ==  2 map['d']  =  'Mix' map.e  =  'IT' assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT' Liste
  35. Syntaxe spéciale pour les collections def  list  =  [1,  2,

     4,  'a',  'b',  'c'] assert  list[3]  ==  'a' list  <<  'd' assert  list[6]  ==  'd' def  range  =  1..10 assert  range.size()  ==  10 def  map  =  [a:  1,  b:  2,  c:  3] assert  map['b']  ==  2 assert  map.b  ==  2 map['d']  =  'Mix' map.e  =  'IT' assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT' Liste Range
  36. Syntaxe spéciale pour les collections def  list  =  [1,  2,

     4,  'a',  'b',  'c'] assert  list[3]  ==  'a' list  <<  'd' assert  list[6]  ==  'd' def  range  =  1..10 assert  range.size()  ==  10 def  map  =  [a:  1,  b:  2,  c:  3] assert  map['b']  ==  2 assert  map.b  ==  2 map['d']  =  'Mix' map.e  =  'IT' assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT' Liste Range Map
  37. Vous avez vu le « power assert » de Groovy

    ? def  (e,  m,  c)  =  [123,  1,  3e9] assert  e  ==  m  *  c  *  2
  38. Vous avez vu le « power assert » de Groovy

    ? def  (e,  m,  c)  =  [123,  1,  3e9] assert  e  ==  m  *  c  *  2 Assignation multiple
  39. Vous avez vu le « power assert » de Groovy

    ? def  (e,  m,  c)  =  [123,  1,  3e9] assert  e  ==  m  *  c  *  2 Assertion  failed:   assert  e  ==  m  *  c  *  2              |  |    |  |  |  |              |  |    1  |  |  6E+9              |  false|  3E+9              123        3E+9 Assignation multiple
  40. Vous avez vu le « power assert » de Groovy

    ? def  (e,  m,  c)  =  [123,  1,  3e9] assert  e  ==  m  *  c  *  2 Assertion  failed:   assert  e  ==  m  *  c  *  2              |  |    |  |  |  |              |  |    1  |  |  6E+9              |  false|  3E+9              123        3E+9 Toutes les valeurs des sous- expressions Assignation multiple
  41. Créer un projet et appliquer le plugin Groovy • Dans

    un nouveau répertoire projet, créer un fichier build.gradle, contenant : apply  plugin:  'groovy' repositories  {        mavenCentral() } dependencies  {        compile  'org.codehaus.groovy:groovy-­‐all:2.1.3'        testCompile                  'org.spockframework:spock-­‐core:0.7-­‐groovy-­‐2.0' }
  42. Créer un projet et appliquer le plugin Groovy • Créer

    quelques répertoires : • src/main/groovy • src/test/groovy
  43. Créer un projet et appliquer le plugin Groovy • Créer

    quelques répertoires : • src/main/groovy • src/test/groovy Nos fichiers source Java & Groovy
  44. Créer un projet et appliquer le plugin Groovy • Créer

    quelques répertoires : • src/main/groovy • src/test/groovy Nos fichiers source Java & Groovy Pour découvrir le framework de test Spock
  45. Créer un projet et appliquer le plugin Groovy • Lister

    les tâches disponibles : $  gradle  tasks
  46. Crédits images • canon http://uponamidnightdreary.com/wp-content/uploads/2011/12/AR22442.jpg • costume http://cdn2.kebello.com/8235-thickbox/costume-3-pieces-ref-patrick.jpg • mickey

    http://4.bp.blogspot.com/-i9hzB7QYgq4/To9UufDo5dI/AAAAAAAAB2g/lKHHMm-KC68/s1600/f787ec3b56c3bd76_mickey-mouse.jpg • gstring http://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 • fantasia http://images.wikia.com/disney/images/d/d8/Fantasia-disneyscreencaps.com-2363.jpg • Spock http://images1.fanpop.com/images/photos/2500000/Zachary-Quinto-Spock-star-trek-2597267-2560-1921.jpg • cloture http://www.lusitane.fr/Userfiles/image/cloture-beton-pedra%20(17).JPG