présentation groovy

43
Groovy

Upload: guest6e3bed

Post on 05-Jul-2015

2.039 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Présentation Groovy

Groovy

Page 2: Présentation Groovy

Qui je suis?

J’ai inventé Groovy

J’entretiens une relation extraconjugale avec Guillaume Laforge

J’ai écrit un super bouquin sur Groovy

Je siège sur l’expert group de la JSR-241

Je suis committer sur Groovy

Jean-Sébastien Bournival

Architecte de systèmes

Nurun

Mon blog: http://js.jipiju.com

Page 3: Présentation Groovy

Agenda

• PARTIE I – Introduction– Origines et principes de base

• PARTIE II - Qu'est ce que Groovy?– Comment se décline ce langage

• PARTIE III - Que fait-on avec Groovy?– Applications concrètes du langage

• PARTIE IV – Conclusion– Références, questions

Page 4: Présentation Groovy

Partie 1: Introduction

Origines et principes de base

Page 5: Présentation Groovy

Introduction

• Précision importante– Groovy == langage de programmation– Grails == framework de développement web

utilisant Groovy

Page 6: Présentation Groovy

Introduction

• Manifeste– Groovy est un langage de programmation

dynamique et agile pour la machine virtuelle Java (JVM)

« Groovy is Java » -Graeme Rocher

Grails project lead

Groovy Java

Java Virtual Machine

bytecode

Page 7: Présentation Groovy

Historique

• Personnel– 2003 James Strachan, le fondateur– 2004 Guillaume Laforge, le récupérateur– 2007 G2One, le catalyseur

• JSR 241– Supportée par IBM, Oracle, Sun, ASF,

ThoughtWorks

Page 8: Présentation Groovy

Installation

• Environnement• $JAVA_HOME• $GROOVY_HOME• $PATH = $PATH;$GROOVY_HOME\bin;$JAVA_HOME\bin• ~/.groovy/lib

• Outils• Interpréteur (groovy.sh)• Shell (groovysh.sh)• Console Swing (groovyConsole.sh)

Page 9: Présentation Groovy

Anatomie d’un script

// monScript.groovy// def maVariable = 3

def uneClosure = { it * it}

println ‘Bonjour monde!’

L’instruction return est

optionnelle

Packages importés par défaut:

groovy.lang.*groovy.util.*java.lang.*java.util.*java.io.*java.net.*Java.math.BigDecimalJava.math.BigInteger

Le point virgule et les paranthèses sont

optionnels

System.out est implicite

Ce script ne contient pas de classe: lors de l’exécution, il sera enrobé dans la méthode

run() d’un objet de type Script

Page 10: Présentation Groovy

Partie 2: Qu’est-ce que Groovy?

Survol du langage

Page 11: Présentation Groovy

Type de données de base

• Tout est Objet (pour vrai de vrai cette fois-ci!)

– pas de type primitif– typage dynamique (ou pas)– autoboxing

• méthode java qui prend un int en paramètre

– l’opérateur ‘==‘ veut dire equals() … pour tout le monde, pour l’identité, il faut utiliser la méthode is()

Page 12: Présentation Groovy

Types de données de base

• Strings– java.lang.String ‘’– groovy.lang.GString “”

• Aussi– Slashy //– Triple quote ‘’’ et “””

Page 13: Présentation Groovy

Expressions régulières

• Sucre syntaxique par-dessus:– java.util.regex.Matcher / Pattern

• Opérateurs ‘~’ ‘=~’ et ‘==~’

// java.util.regex.Patterndef pattern = ~/.ou/

// java.util.regex.Matcherdef matcher = ('hibou pou chou genou' =~ pattern)assert matcher.size() == 4

assert 'hibou' ==~ /.*ou/

Page 14: Présentation Groovy

Structures de contrôle

• La vérité, rien que la vérité …– true == références objets non-nulle– true == list/map non-vide– true == string non-vide– true == un matcher ayant un match– true == Valeur numérique différente de zéro– true == true (la valeur booléenne)

• Aussi:– l’instruction if () == celle de Java– idem pour les try {…} catch() {…}

Page 15: Présentation Groovy

Structures de contrôle (2)

• Boucler– le while(expr) est identique à celui de Java– pas de do {…} while (expr) en Groovy– for (variable in iterable) { instr }

def matcher = '12xy5' =~ /\d/for (match in matcher) { println match }

def myString = 'Saku Koivu'for (i in 0..<myString.size()) { ... }

Page 16: Présentation Groovy

Structures de contrôle (3)

• Un switch beaucoup plus puissant qu’en Java :

switch (x) { case 7: println "7"; break; case 2.3: println "2.3"; break; case "dog": println "dog"; break; case [1, 2, 'alf']: println "in list"; break; case (3..6): println "in range"; break; case Integer: println "Integer"; break; case ~"ca.*": println "regex"; break;}

Page 17: Présentation Groovy

GDK

• Plusieurs types de Java deviennent plus Groovy!java.io.File:

eachLine (Closure closure)eachFile (Closure closure)

java.util.Date:minus(int days)plus(int days)

java.lang.String:toURL()

java.util.Collection:count(Object value)find(Closure closure)findAll(Closure closure)

Page 18: Présentation Groovy

Support natif des collections

• Les listes– opérateur subscript [] = getAt()/putAt()– opérateur Spread *.– permet l’utilisation d’index négatifs

def sakuList = []sakuList = ['fi','en']sakuList << 'fr'assert sakuList instanceof java.util.List

Page 19: Présentation Groovy

Support natif des collections (2)

• Les maps– permet la syntaxe .dot sur les clés– utilisation de valeur par défaut

def sakuMap = [:]sakuMap = [ 'team':'mtl', 'goals':12, 'languages':['fi', 'en'] ]println sakuMap.teamassert sakuMap instanceof java.util.Map

Page 20: Présentation Groovy

Support natif des collections (3)

• Les ranges– une liste de valeurs séquentielles– opérateur .. et ..<– utilisation: boucles, switch, et closures

def range = 5..8assert range.size() == 4for (i in range) { println "Hello ${i}"}

Page 21: Présentation Groovy

Closures

• Wikipedia« In computer science, a closure is a function that is evaluated in an environment

containing one or more bound variables. When called, the function can access these variables. The explicit use of closures is associated with functional programming and with languages such as ML and Lisp.»

• Fonction Lambda de Lisp.

(define (derivative f dx)(lambda (x) (/ (- (f (+ x dx)) (f x)) dx)))

Page 22: Présentation Groovy

Closures (2)

• En Groovy– Une "closure" c'est un bout de code:

• assigné à une variable ou anonyme• exécuté ultérieurement• de type groovy.lang.Closure

• Utilisation typique– List (.each())– File (.eachLine(), .eachFile())– …

Page 23: Présentation Groovy

Programmation objet

• Identique à Java … sauf:– les inner class ne sont pas supportées– le scope par défaut des

classes/méthodes/attributs est public– paramètres positionnels, et nommés– surcharge d’opérateurs permise– safe dereferencing operator ‘?.’

Page 24: Présentation Groovy

Programmation objet

• GroovyBeans– Ajoute au formalisme des JavaBeans

• get/set sous-entendu pour préserver l’encapsulation

• opérateur @

– Expando, ou un GroovyBean « vierge »• ajout dynamique d’attributs et méthodes

(closures)

Page 25: Présentation Groovy

Programmation META objet

• Sous le capot de Groovy:– toutes les classes ont une

méta-classe– une méta-classe permet, entre

autres, d’intercepter des appels à des méthodes inexistantes classe

méta-classe

appel de methode()

Page 26: Présentation Groovy

Partie 3: Que fait-on avec Groovy?

Applications concrètes du langage

Page 27: Présentation Groovy

Builders

• Principes basés sur le célèbre patron de conception (GOF 97)– Permet de construire des structures de type

«arbre»

def builder = new MarkupBuilder()

builder.'web-app' {

'display-name' 'My Webapp'

} <web-app>

<display-name>My Webapp</display-name>

</web-app>

Page 28: Présentation Groovy

Builders

• Applications usuelles– MarkupBuilder– AntBuilder– GraphicsBuilder– SwingBuilder– …

Page 29: Présentation Groovy

XML

• 2 Objets Groovy pour faciliter le parsing de structures XML– groovy.util.XMLParser– groovy.util.XMLSlurper

• Utiliser des librairies Java est tout aussi recommandé!– DOM4J, par exemple

new XmlSlurper().parse(new File('C:/dev/data/file.xml'))

Page 30: Présentation Groovy

GSQL

• Accès aux SGBD– package groovy.sql.*

– 2 façons de rendre SQL Groovy:• Nature

– groovy.sql.GroovyResultSet

• DataSets– groovy.sql.DataSet

Page 31: Présentation Groovy

GANT

• Gant permet de construire des scripts de build à l’aide d’Ant, mais écrits en Groovy– « Look Ma! No XML! »– Utilise les tâches d’Ant– Il existe un plugin pour Hudson

target ( default : 'This is the default target.' ) { if (System.getenv ( ).'JAVA_HOME') { anotherTarget() }}

Page 32: Présentation Groovy

Services Web

• Module GroovyWS– Enrobe le cadre d’application Apache CXF

• Client et serveur se définissent de façon Groovy, c’est-à-dire simple et concise– groovyx.net.ws.WSServer– groovyx.net.ws.WSClient

Page 33: Présentation Groovy

Services Web

import groovyx.net.ws.WSClient

def proxy = new WSClient("http://localhost:6980/MathService?wsdl", this.class.classLoader)

def result = proxy.add(1.0 as double, 2.0 as double)

import groovyx.net.ws.WSServer

def server = new WSServer()

server.setNode("MathService", "http://localhost:6980/MathService")

Serveur

Client

Page 34: Présentation Groovy

Tester avec Groovy

• GroovyTestCase– JUnit est enchâssé dans l’environnement

d’exécution de Groovy– Ajoute plusieurs méthodes assert*– GroovyTestSuite s’intègre à merveille avec les

IDE– Il est tout aussi facile de rouler une batterie

de tests avec Ant ou Maven

Page 35: Présentation Groovy

Tester avec Groovy

• Tester avec d’autres outils– Unit tests

• TestNG

– Services web• Canoo WebTest• SOAPUI

– Coverage• Cobertura

Page 36: Présentation Groovy

Partie 4: Conclusion

La fin … vraiment? Ou seulement le début?

Page 37: Présentation Groovy

State of the «groovy» nation

• Version– Dernière livraison: 1.1 RC 2– 1.1 final devrait être à nos portes

• Présence– Spring– Jboss Seam– IBM project ZERO– OpenEJB– ServiceMix– Grails– Hudson– Canoo Web Test– SoapUI

Page 38: Présentation Groovy

Défis à venir

• Surfer sur la vague sans perdre pied!– maintenir le rythme effréné des livraisons– maintenir le niveau élevé de la qualité

• Documentation– la communauté le réclame: une documentation à

jour, mieux organisée

• Performance– bien que cet aspect ait été amélioré depuis quelques

livraisons, beaucoup de travail reste à faire

Page 39: Présentation Groovy

Voir la lumière …

• Grails– Cadre d’application web agile– Assemblage de frameworks connus de

l’écosystème Java– Applique les principes de productivité de

Rails en lui chipant plusieurs idées (À tout seigneur, tout honneur.)

– À suivre …

Page 40: Présentation Groovy

Références

• Bouquins– Groovy in actionDierk König, 2007ISBN 1-932394-84-2

– Groovy programmingKenneth Barclay/John Savage, 2006ISBN 978-0-12-372507-3

– Groovy RecipesScott Davis, Coming soon! ?

Page 41: Présentation Groovy

Références

• Sur la grande toile– http://groovy.codehaus.org– http://www.groovyblogs.org– http://www.aboutgroovy.com– http://www.g2one.com – http://jcp.org/en/jsr/detail?id=241

– Groovy User Groups• Vancouver http://groovyvan.com/ • Londres http://skillsmatter.com/menu/539 • Melbourne http://tech.groups.yahoo.com/group/groovy-melbourne/ • Stuttgart http://www.jugs.de/sig-groovy.html • Minnesota http://groups.google.com/group/groovymn • Montréal?

Page 42: Présentation Groovy

Références

• La Blogoshère– Guillaume Laforge– Jason Rudolph– Glen Smith– Sven Haiges– Scott Davis– Venkat Subramaniam– Geertjan Wielenga– Jeremy Rayner– Mark Palmer– Jeff Brown– Andres Almiray– …

http://glaforge.free.fr/weblog/

http://www.jasonrudolph.com/blog/ http://blogs.bytecode.com.au/glen/

http://svenhaiges.de/ http://www.davisworld.org/ http://www.agiledeveloper.com/blog/

http://blogs.sun.com/geertjan/ http://javanicus.com/blog2/ http://www.anyware.co.uk/2005/ http://javajeff.blogspot.com/

http://jroller.com/aalmiray/

Page 43: Présentation Groovy

Des questions?

Merci à [email protected]