Un langage de script pour la JVM - PowerPoint PPT Presentation

1 / 23
About This Presentation
Title:

Un langage de script pour la JVM

Description:

Un langage de script pour la JVM. 2004/07 - Guillaume Laforge ... Manque de support dans les IDEs ' Debugging Hell ' Mais j'ai bon espoir ... – PowerPoint PPT presentation

Number of Views:59
Avg rating:3.0/5.0
Slides: 24
Provided by: guillaum8
Category:
Tags: jvm | ides | langage | pour | script

less

Transcript and Presenter's Notes

Title: Un langage de script pour la JVM


1
  • Un langage de script pour la JVM

2004/07 - Guillaume Laforge
2
Langage de scriptpour la JVM
  • Créé par James Strachan et Bob McWhirter
  • Un langage de script pour la JVM
  • Inspiré de Java, Ruby et Python
  • Génère directement du bytecode
  • Syntaxe entre Java et Ruby, très concise
  • Réutilise directement les librairies Java
  • Pas dAPI propriétaire comme Ruby ou Python
  • Facilement intégrable dans un environnement J2EE

2004/07 - Guillaume Laforge
3
Quest ce que Groovy ?
  • Cest un langage de script
  • Utilisable dans un Shell, aussi bien quintégré
  • Dynamique et agile
  • Typage, virgules, parenthèses optionnels
  • List et Map avec une syntaxe native
  • Closures, expressions régulières, surcharge
    dopérateur
  • Tout plein de sucre syntaxique et de méthodes
    couteau-suisse
  • Orienté objet
  • Même modèle que Java classe, interface et
    héritage

2004/07 - Guillaume Laforge
4
Langage dynamique
  • Typage dynamique
  • int a 5
  • b 6
  • String s coucou
  • t bonjour
  • Parenthèses et point-virgule optionnels
  • int a 3 int b 4
  • println( a )
  • c 2
  • print c
  • print "hello".indexOf( 'e' )

2004/07 - Guillaume Laforge
5
GString
  • h1 "hellohello"
  • h2 'hello' 2
  • mix1 "hello 'there' dude"
  • mix2 'hello "there" dude'
  • wrap "sur plusieurs
  • lignes"
  • triple """On peut escaper
  • ce quon veut """
  • heredoc ltltltBLAH
  • Encore un peu de texte
  • escapé sur plusieurs lignes
  • BLAH

Le petit plus, cest les variables insérées
name "Guillaume" salut "Salut name"
-gt "Salut Guillaume"
2004/07 - Guillaume Laforge
6
Script, classe, bean, etc.
  • Un script
  • println OSS Get-Together!
  • Une classe, un bean
  • class MonPtitGars String nom int
    ageme new MonPtitGars(nomGuillaume,
    age26)
  • println me.nomme.age 27

2004/07 - Guillaume Laforge
7
List et Map sauce Groovy
  • Une liste
  • vide
  • list 1, 2, 3, 4
  • list.each println it
  • Une map
  • rien
  • moi nom Laforge, age 27
  • println moi.nom
  • println moi.age

2004/07 - Guillaume Laforge
8
Looping la tête en bas
  • if/else, while, do, classiques comme en Java
  • Boucler (à part le for classique)
  • for (i in 1..3)
  • for (ch in Guillaume)
  • for (item in 1, 2, 3, 4)
  • for (entry in nom Laforge, age 27)

2004/07 - Guillaume Laforge
9
Switch on steroïds
  • Un switch beaucoup pluis puissant quen 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 case new MyCase() println
    "MyCase" break
  • class MyCase isCase(thing) return thing
    'me'

2004/07 - Guillaume Laforge
10
Expressions régulières
  • Patterns pattern "na."
  • Matchers
  • matcher ("name" pattern)
  • println matcher.matches() -gt true
  • Regex Matches println("name" "na.") -gt
    true
  • Indexing Matchers
  • m "a name is just a game" ".ame"
  • println m1 -gt "game"
  • m "a name is just a game" ".name (.) just
    (.) game."
  • println("Regex m1 m2 cool thing!")
  • -gt "Regex is a cool!"

2004/07 - Guillaume Laforge
11
Closures
public class Filter public static void main(
String args ) List list new
java.util.ArrayList() list.add( "Rod" )
list.add( "James" ) list.add( "Chris" )
Filter filter new Filter() List shorts
filter.filterLongerThan( list, 4 ) for (
String item shorts ) System.out.println(
item ) public List filterLongerThan(
List list, int length ) List result
new ArrayList() for ( String item list )
if ( item.length() lt length )
result.add( item ) return
result
  • Java
  • Groovy

list "Rod", "James", "Chris" shorts
list.findAll it.size() lt 4 shorts.each
println it
2004/07 - Guillaume Laforge
12
Closures (2)
  • Un mix entre
  • Un simple bloc de code
  • Une fonction anonyme
  • Pratique pour itérer
  • 1, 2, 4.each println it 4
  • a1, b2.each println it.keyit.value
  • 5.times println it
  • Ca sécrit comment ?
  • c name println Hello name

2004/07 - Guillaume Laforge
13
Groovy JDK
  • Une sorte de  mixin , de surcouche du JDK
  • String
  • contains(), count(), execute(), padLeft(),
    center(), padRight(), reverse(), tokenize(),
    each()
  • Collection
  • count(), collect(), join(), each(),
    reverseEach(), find/All(), min(), max(),
    inject(), sort()
  • File
  • eachFile(), eachLine(), withPrintWriter(),
    write(), getText()

2004/07 - Guillaume Laforge
14
Groovy JDK (2)
  • En plus, on peut en rajouter soi-même !
  • class MyStringUtil String
    sayHelloTo(String self, String name)
    self says hello to name
    use(MyStringUtil) println
    Guillaume.sayHelloTo(Vincent)

2004/07 - Guillaume Laforge
15
ExpandoClosure Mixin
  • Un Expando, cest une sorte de Bean dynamique
  • bean new Expando()
  • bean.name  Guillaume  bean.age 27
  • On peut en faire une sorte de  Mixin 
  • class Greeting extends Expando    String
    name    say println "Hello name!"
    greet new Greeting(name"Guillaume")greet.s
    ay()greet.say println "greet.name is a
    Groovy despot" greet.say()

2004/07 - Guillaume Laforge
16
GPath, un XPath amélioré
  • class Person name age
  • list new Person( nameGuillaume, age27 ),
  • new Person( nameJames, age35 )
  • println( list.find it.age gt 25.name )
  • -gt Guillaume
  • println( list.findAll it.age gt 25.name )
  • -gt Guillaume, James
  • println( list.any it.name.size() gt 4 )
  • -gt true

2004/07 - Guillaume Laforge
17
XML Génération
  • On peut générer du XML facilement avec un
     builder 

data 'Rod' 'Misha'8, 'Bowie'2,
'Eric' 'Poe'4, 'Doc'3 xml new
groovy.xml.MarkupBuilder() people xml.people()
for ( entry in data ) person( name
entry.key ) for ( dog in entry.value)
pet( namedog.key, agedog.value )

ltpeoplegt ltperson name'Rod'gt ltpet
name'Bowie' age'2' /gt ltpet name'Misha'
age'8' /gt lt/persongt ltperson name'Eric'gt
ltpet name'Poe' age'4' /gt ltpet name'Doc'
age'3' /gt lt/persongt lt/peoplegt
2004/07 - Guillaume Laforge
18
XML Parsing et Navigation
people new groovy.util.XmlParser().parseText(
xml ) println people.person.pet'_at_name' -gt
'Misha','Bowie','Poe','Doc' println
people.person.pet.findAll Integer.parseInt(
it'_at_age' ) gt 3 '_at_name' -gt Misha,
Poe println people.person.findAll
it.pet'_at_name'.every it.size() gt 3
'_at_name'0 -gt "Rod"
2004/07 - Guillaume Laforge
19
Scripter Ant
class Build ant new groovy.util.AntBuilder()t
argets 'clean', 'compile' static void
main(args) b new Build() if (
args.size() gt 0 ) b.targets args
b.run()void run() for ( target in targets
) invokeMethod( target.toString(), null
) clean() ant.rmdir( dir'target' )
compile() ant.mkdir( dir'target/classes'
) ant.compile( srcdir'src/main/java',
destdir'target/classes' )
fileset includes( name'/.java' )
2004/07 - Guillaume Laforge
20
Facile de faire une IHM
  • swing new groovy.swing.SwingBuilder()
  • frame swing.frame(title 'This is a Frame',
    location100,100,size800,400
    ) menuBar menu(text 'File')
    menuItem() action(name'New',
    closure println("New") )
    panel(layout new BorderLayout())
    label(text 'Name', constraints
    BorderLayout.WEST, toolTipText 'This
    is the name field') textField(text 'Rod',
    constraints BorderLayout.CENTER)
  • button(text 'Click me!',
    constraints BorderLayout.SOUTH,
    actionPerformedprintln("Button clicked!"))

2004/07 - Guillaume Laforge
21
SQL facile !
  • sql new groovy.sql.Sql( dataSource )
  • sql.execute( "create table person (name varchar,
    age integer)" )
  • people sql.dataSet( "person" )
  • people.add( name Guillaume", age 27 )
  • people.add( name "James", age 35 )
  • sql.eachRow( "select from person" ) p
  • println "p.name is p.age years old"
  • -gt Guillaume is 27 years old
  • -gt James is 35 years old

2004/07 - Guillaume Laforge
22
XML-RPC
  • Serveur
  • server new XMLRPCServer( 2, 10, 8, 1000, 1000
    ) server.testme name name " is cool!"
    server.multiply number number 10
    serverSocket new java.net.ServerSocket( 9047
    ) server.startServer( serverSocket )
  • Client
  • serverProxynew XMLRPCServerProxy("http//127.0.
    0.19047") println serverProxy.testme( "Groovy" )
    -gt "Groovy is cool!" println serverProxy.multiply(
    7 ) -gt 70 server.stopServer()

2004/07 - Guillaume Laforge
23
Conclusion
  • Groovy, cest pas fini !
  • Syntaxe toujours en cours dévolution
  • JSR 241
  • Manque de support dans les IDEs
  •  Debugging Hell 
  • Mais jai bon espoir ?
  • Au prochain épisode, comment intégrer Groovy ?

2004/07 - Guillaume Laforge
Write a Comment
User Comments (0)
About PowerShow.com