groovy workshop à mix-it 2013

67

Upload: guillaume-laforge

Post on 17-May-2015

689 views

Category:

Technology


4 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Groovy workshop à Mix-IT 2013
Page 2: Groovy workshop à Mix-IT 2013

Groovy, les mains dans le cambouis

Guillaume LaforgeGroovy Project ManagerSpringSource / VMware

Page 3: Groovy workshop à Mix-IT 2013

Guillaume Laforge @glaforge

http://glaforge.appspot.com http://gplus.to/glaforge

Page 4: Groovy workshop à Mix-IT 2013

GVM, Groovy enVironment Managerpour installer facilement Groovy

Grails, Gradle, Griffon, Vert.x

Installation de GVM, Groovy et Gradle

Page 5: Groovy workshop à Mix-IT 2013

http://gvmtool.net

Page 6: Groovy workshop à Mix-IT 2013

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

Page 7: Groovy workshop à Mix-IT 2013

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  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

Page 8: Groovy workshop à Mix-IT 2013

Quelques bases, pour apprendre Groovy

A la découvertede Groovy...

Page 9: Groovy workshop à Mix-IT 2013

L’artillerie Groovy-esque

Commande groovy

Compilateur groovyc

REPL groovysh

Console Swing groovyConsole

Page 10: Groovy workshop à Mix-IT 2013

« Groovy, c’est comme Java,

mais sans le costume

trois pièces »

Page 11: Groovy workshop à Mix-IT 2013

Une personne... sauce Javapublic  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;        }}

Page 12: Groovy workshop à Mix-IT 2013

Une personne... sauce Javapublic  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 !

Page 13: Groovy workshop à Mix-IT 2013

Une personne... sauce Javapublic  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        }}

Page 14: Groovy workshop à Mix-IT 2013

Une personne... sauce Javapublic  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

Page 15: Groovy workshop à Mix-IT 2013

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        }}

Page 16: Groovy workshop à Mix-IT 2013

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

Page 17: Groovy workshop à Mix-IT 2013

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        }}

Page 18: Groovy workshop à Mix-IT 2013

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

Page 19: Groovy workshop à Mix-IT 2013

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

Page 20: Groovy workshop à Mix-IT 2013

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

Un langage sexy avec des GString

Page 21: Groovy workshop à Mix-IT 2013

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

Page 22: Groovy workshop à Mix-IT 2013

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

Reformattons tout ce beau bazar

Page 23: Groovy workshop à Mix-IT 2013

Une personne... sauce Groovy !

class  Person  {        String  name                String  greet()  {                "Hello,  my  name  is  ${name}"        }}

Page 24: Groovy workshop à Mix-IT 2013

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;        }}

Page 25: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person();person.setName("Guillaume");

System.out.println(person.greet());

Page 26: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person();person.setName("Guillaume");

System.out.println(person.greet());

Sans points-virgules

Page 27: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person()person.setName("Guillaume")

System.out.println(person.greet())

Page 28: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person()person.setName("Guillaume")

System.out.println(person.greet())

println version raccourcie

Page 29: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person()person.setName("Guillaume")

                     println(person.greet())

Page 30: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person()person.setName("Guillaume")

                     println(person.greet())

sans parenthèses

Page 31: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person()person.setName  "Guillaume"

                     println  person.greet()  

Page 32: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person()person.setName  "Guillaume"

                     println  person.greet()  

notation d’accès aux propriétés

Page 33: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person()person.name  =    "Guillaume"

                     println  person.greet()  

Page 34: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

Person  person  =  new  Person()person.name  =    "Guillaume"

                     println  person.greet()  

typage optionnel

Page 35: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

def        person  =  new  Person()person.name  =    "Guillaume"

                     println  person.greet()  

Page 36: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

def        person  =  new  Person()person.name  =    "Guillaume"

                     println  person.greet()  

constructeur avec paramètres nommés

Page 37: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

def        person  =  new  Person(name:  "Guillaume")  

                     println  person.greet()  

Page 38: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

def        person  =  new  Person(name:  "Guillaume")  

                     println  person.greet()  

un petit coup de reformat pour les yeux

Page 39: Groovy workshop à Mix-IT 2013

Comment lui faire dire bonjour...

def  person  =  new  Person(name:  "Guillaume")

println  person.greet()  

Page 40: Groovy workshop à Mix-IT 2013

On va se faire la cloture...

Page 41: Groovy workshop à Mix-IT 2013

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

Page 42: Groovy workshop à Mix-IT 2013

Le défilé des collections

Page 43: Groovy workshop à Mix-IT 2013

Syntaxe spéciale pour les collectionsdef  list  =  [1,  2,  4,  'a',  'b',  'c']assert  list[3]  ==  'a'

list  <<  'd'assert  list[6]  ==  'd'

def  range  =  1..10assert  range.size()  ==  10

def  map  =  [a:  1,  b:  2,  c:  3]assert  map['b']  ==  2assert  map.b  ==  2

map['d']  =  'Mix'map.e  =  'IT'assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT'

Page 44: Groovy workshop à Mix-IT 2013

Syntaxe spéciale pour les collectionsdef  list  =  [1,  2,  4,  'a',  'b',  'c']assert  list[3]  ==  'a'

list  <<  'd'assert  list[6]  ==  'd'

def  range  =  1..10assert  range.size()  ==  10

def  map  =  [a:  1,  b:  2,  c:  3]assert  map['b']  ==  2assert  map.b  ==  2

map['d']  =  'Mix'map.e  =  'IT'assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT'

Liste

Page 45: Groovy workshop à Mix-IT 2013

Syntaxe spéciale pour les collectionsdef  list  =  [1,  2,  4,  'a',  'b',  'c']assert  list[3]  ==  'a'

list  <<  'd'assert  list[6]  ==  'd'

def  range  =  1..10assert  range.size()  ==  10

def  map  =  [a:  1,  b:  2,  c:  3]assert  map['b']  ==  2assert  map.b  ==  2

map['d']  =  'Mix'map.e  =  'IT'assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT'

Liste

Range

Page 46: Groovy workshop à Mix-IT 2013

Syntaxe spéciale pour les collectionsdef  list  =  [1,  2,  4,  'a',  'b',  'c']assert  list[3]  ==  'a'

list  <<  'd'assert  list[6]  ==  'd'

def  range  =  1..10assert  range.size()  ==  10

def  map  =  [a:  1,  b:  2,  c:  3]assert  map['b']  ==  2assert  map.b  ==  2

map['d']  =  'Mix'map.e  =  'IT'assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT'

Liste

Range

Map

Page 47: Groovy workshop à Mix-IT 2013

Vous avez vu le « power assert » de Groovy ?

def  (e,  m,  c)  =  [123,  1,  3e9]

assert  e  ==  m  *  c  *  2

Page 48: Groovy workshop à Mix-IT 2013

Vous avez vu le « power assert » de Groovy ?

def  (e,  m,  c)  =  [123,  1,  3e9]

assert  e  ==  m  *  c  *  2Assignation

multiple

Page 49: Groovy workshop à Mix-IT 2013

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

Page 50: Groovy workshop à Mix-IT 2013

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

Page 51: Groovy workshop à Mix-IT 2013

La magie de la méta-programmation

Page 52: Groovy workshop à Mix-IT 2013

Créer un projet GradleUtiliser le plugin Groovy

Bon, ben... c’est parti !

Page 53: Groovy workshop à Mix-IT 2013
Page 54: Groovy workshop à Mix-IT 2013

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'}

Page 55: Groovy workshop à Mix-IT 2013

Créer un projet et appliquer le plugin Groovy

• Créer quelques répertoires :

• src/main/groovy

• src/test/groovy

Page 56: Groovy workshop à Mix-IT 2013

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

Page 57: Groovy workshop à Mix-IT 2013

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

Page 58: Groovy workshop à Mix-IT 2013

Créer un projet et appliquer le plugin Groovy

• Lister les tâches disponibles :

$  gradle  tasks

Page 59: Groovy workshop à Mix-IT 2013
Page 60: Groovy workshop à Mix-IT 2013

Pour tester et builder notre projet

Page 61: Groovy workshop à Mix-IT 2013

Pour tester et builder notre projet

Générer la documentation

Page 62: Groovy workshop à Mix-IT 2013

Pour tester et builder notre projet

Générer la documentation

Pour lancer les tests

Page 63: Groovy workshop à Mix-IT 2013

Pour tester et builder notre projet

Générer la documentation

Pour lancer les tests

Faire un peu le ménage

Page 64: Groovy workshop à Mix-IT 2013

Spock : Enterprise test framework

Page 65: Groovy workshop à Mix-IT 2013

Questions & Réponses

Page 66: Groovy workshop à Mix-IT 2013

Merci ! @glaforge

http://glaforge.appspot.com http://gplus.to/glaforge

Page 67: Groovy workshop à Mix-IT 2013

Crédits images• canon

http://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