groovy workshop à mix-it 2013

Post on 17-May-2015

689 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Groovy, les mains dans le cambouis

Guillaume LaforgeGroovy Project ManagerSpringSource / VMware

Guillaume Laforge @glaforge

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

GVM, Groovy enVironment Managerpour installer facilement Groovy

Grails, Gradle, Griffon, Vert.x

Installation de GVM, Groovy et Gradle

http://gvmtool.net

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

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

Quelques bases, pour apprendre Groovy

A la découvertede Groovy...

L’artillerie Groovy-esque

Commande groovy

Compilateur groovyc

REPL groovysh

Console Swing groovyConsole

« Groovy, c’est comme Java,

mais sans le costume

trois pièces »

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

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 !

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

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

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

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

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

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

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

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

Un langage sexy avec des GString

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

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

Reformattons tout ce beau bazar

Une personne... sauce Groovy !

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

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

Comment lui faire dire bonjour...

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

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

Comment lui faire dire bonjour...

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

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

Sans points-virgules

Comment lui faire dire bonjour...

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

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

Comment lui faire dire bonjour...

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

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

println version raccourcie

Comment lui faire dire bonjour...

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

                     println(person.greet())

Comment lui faire dire bonjour...

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

                     println(person.greet())

sans parenthèses

Comment lui faire dire bonjour...

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

                     println  person.greet()  

Comment lui faire dire bonjour...

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

                     println  person.greet()  

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

Comment lui faire dire bonjour...

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

                     println  person.greet()  

Comment lui faire dire bonjour...

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

                     println  person.greet()  

typage optionnel

Comment lui faire dire bonjour...

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

                     println  person.greet()  

Comment lui faire dire bonjour...

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

                     println  person.greet()  

constructeur avec paramètres nommés

Comment lui faire dire bonjour...

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

                     println  person.greet()  

Comment lui faire dire bonjour...

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

                     println  person.greet()  

un petit coup de reformat pour les yeux

Comment lui faire dire bonjour...

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

println  person.greet()  

On va se faire 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é des collections

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'

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

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

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

Vous avez vu le « power assert » de Groovy ?

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

assert  e  ==  m  *  c  *  2

Vous avez vu le « power assert » de Groovy ?

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

assert  e  ==  m  *  c  *  2Assignation

multiple

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

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

La magie de la méta-programmation

Créer un projet GradleUtiliser le plugin Groovy

Bon, ben... c’est parti !

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

Créer un projet et appliquer le plugin Groovy

• Créer quelques répertoires :

• src/main/groovy

• src/test/groovy

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

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

Créer un projet et appliquer le plugin Groovy

• Lister les tâches disponibles :

$  gradle  tasks

Pour tester et builder notre projet

Pour tester et builder notre projet

Générer la documentation

Pour tester et builder notre projet

Générer la documentation

Pour lancer les tests

Pour tester et builder notre projet

Générer la documentation

Pour lancer les tests

Faire un peu le ménage

Spock : Enterprise test framework

Questions & Réponses

Merci ! @glaforge

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

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

top related