Thématiques principales

mardi 7 novembre 2017

Groovy

Initialement je souhaitais faire un article sur Gradle mais celui ci est basé sur Groovy, donc en toute logique nous allons faire un petit tour d'horizon de ce langage de script.

Groovy, dont une rapide introduction est donnée ici, est un langage de scripting basé sur Java dont il hérite les principaux concepts tels que le concept objet, le bytecode et la syntaxe. On peut même écrire en Java avec Groovy mais nous verrons qu'il existe des simplifications syntaxique comme le typage dynamique comme en Python ce qui accélère le développement et facilite le prototypage.

Les variables 


Globalement pour la définition des variables, le typage étant dynamique comme en SmallTalk, la declaration se realise par un simple:

a=12
b="toto"

Au choix il est possible (et conseillé ) d'ajouter le mot clef def afin de conserver une lisibilitée sufisante. Dans le cas ou il est necessaire de faire un typage fort, comme Groovy est basé sur Java, rien n'empeche d'ecrire:

Integer a=12
String b="toto"

A noter que je n'ai pas mis de point virgules mais qu'il est possible de les utiliser (Java toujours la...)

Les listes et dictionnaires


Pour ce qui est des listes:

def liste=[ 'toto', 12, "tata" ]
liste.each{
println (it)
}

et des dictionnaires:

def mamap=[ 'toto':12, 12:"tata", "tata":'toto' ]
println mamap['toto']
println mamap[mamap[mamap['toto']]] // pour rigoler un peu...

Bon bien sur il existe aussi les structures de contrôle et les boucles que nous avons vu juste au dessus. A noter que celle ci utilise le pointeur it comme reference a l'objet courant de l'iteration.

Les chaines et regex


Sur les chaines de caracteres on peut employer un raccourci pour faire des regex en utilisant le symbole "=~", ce qui aura pour consequence la creation d'un objet de la classe java.util.regex.Pattern:

def machaine="Groovy is groovy"
def pattern=/(G|g)roovy/
def matcher= machaine =~ pattern

println "tous les resultats"
println matcher.grep().each {
    println it
}
println "Dans le details"
println matcher[0][0]
println matcher[0][1]
println matcher[1][0]
println matcher[1][1]
Nous donnera:
tous les resultats
[Groovy, G]
[groovy, g]
[[Groovy, G], [groovy, g]]
Dans le details
Groovy
G
groovy
g

Les Classes

Etant basé sur java, il va etre possible d'utiliser le concept objet avec quelques simplifications facilitant grandement le prototypage. Prennons par exemple la classe suivante:

class MaClass
{
    String maProp
   
    def hello(quoi)
    {
    return "hello"+quoi
    }
   
   
}
def obj=new MaClass()
obj.hello "world"

Il faut savoir que par défaut les classes en groovy sont publique, les données membres privées et les méthodes publiques.

Pour créer une classe abstraite de la même façon qu'en Java il suffit de déclarer abstract avant le mot clef class et pour définir une méthode abstraite, de la même façon, il faut le déclarer avant le mot clef def.

Pour l’héritage, de nouveau comme en Java, les mots clefs extends et implements sont au rendez vous, tout comme la manière de déclarer des interfaces.

Les closures

Et faire des closures comme en JavaScript ou les lambda expression de Java8, amenant une programmation plus dynamique et réactive.

Ainsi une premiere closure que l'on peut ecrire serai:

def hello={qui ->
    print "hello" + qui;
}

hello("world")
Une closure suit donc la construction syntaxique suivante (ici sous la forme de grammaire simplifier):

CLOSURE ::= { [args->] instructions }

Conclusion

Inutile de faire des kilomètres de doc sur la syntaxe de Groovy, celle ci est simple et si vous etes un développeur Java, vous ne serez pas perdu car vous pouvez a tout instant revenir et faire confiance a vos basiques. Cependant, il ne faut pas se tromper, et finalement ne faire que du Java, car Groovy offre des simplifications pour l’écriture du code qui facilite vraiment le développement rapide. Apres toute la subtilité se trouvera peut être dans l'exploitation du code groovy at runtime....

Pour obtenir plus d'informations générales sur groovy, je vous invite a consulter le site https://www.tutorialspoint.com/groovy ou le site de torrefacteurjava qui est vraiment tres complet.

Maintenant on va pouvoir s’intéresser a Gradle.... et pourquoi pas Grails ?

Aucun commentaire:

Enregistrer un commentaire