Groovy (langage)

Pour les articles homonymes, voir Groovy.

Groovy

* * *

Date de première version  | 2003
Paradigmes | Objet, impératif
Auteur  | Java Community Process
Dernière version | 4.0.27 (24 mai 2025)[1]
Influencé par  | Java, Python, Ruby, Smalltalk
Écrit en | Java
Système d'exploitation | Multiplate-forme
Licence | Licence Apache 2.0 et licence Apache
Site web | www.groovy-lang.org
Extension de fichier | groovy, gvy, gsh et gy
modifier

Groovy est le nom d'un langage de programmation orienté objet destiné à la plate-forme Java. Il constitue un substitut au langage Java pour cette plate-forme et est inspiré de Python, Ruby et Smalltalk. Il est l'objet de la spécification JSR 241[2].

Groovy utilise une syntaxe très proche de Java, avec des accolades, et est directement compilé, soit à la volée dynamiquement, soit classiquement avec un compilateur en bytecode.

Groovy s'intègre et est entièrement compatible avec la JVM étant donné que le bytecode est le même. Il peut donc :

* utiliser les bibliothèques Java ;
* être utilisé dans des classes Java.

Groovy peut être comparé à BeanShell, l'objectif de faire un langage de scripting proche de Java est le même, la mise en œuvre étant différente.

## Principales caractéristiques du langage

[modifier | modifier le code]

Groovy possède certaines caractéristiques qui le différencient du Java standard :

* typage statique et typage dynamique ;
* listes, maps, et expressions rationnelles nativement supportées ;
* fermetures ou clôtures ;
* surcharge des opérateurs.

### Comparaison entre Java et Groovy

[modifier | modifier le code]

Un exemple qui affiche dans la sortie standard des chaines de caractères ayant au plus quatre lettres.

Java 5 :

class Filter {
public static void main(String[] args) {
for (String item : Arrays.asList("Rod", "Carlos", "Chris"))
if (item.length() <= 4) System.out.println(item);

Java 8 :

class Filter {
public static void main(String[] args) {
Stream.of("Rod", "Carlos", "Chris")
.filter(item -> item.length() <= 4)
.forEach(System.out::println);

Java 21 :

void main() {
Stream.of("Rod", "Carlos", "Chris")
.filter(item -> item.length() <= 4)
.forEach(System.out::println);

Groovy :

["Rod", "Carlos", "Chris"].findAll { it.size() <= 4 }.each { println it }

### Langage de balisage

[modifier | modifier le code]

Une des caractéristiques notables de Groovy est sa gestion native des langages de balisage comme XML et HTML. Cette prise en charge permet de définir et manipuler par programmation plusieurs types de structures avec une syntaxe commune.

Par exemple un code Groovy qui produit du XML :

import groovy.xml.MarkupBuilder
def myXMLDoc = new MarkupBuilder()
myXMLDoc.workbook {
worksheet(caption:"Employees") {
row(fname:"John", lname:"McDoe")
row(fname:"Nancy", lname:"Davolio")

worksheet(caption:"Products") {
row(name:"Veeblefeetzer", id:"sku34510")
row(name:"Prune Unit Zappa", id:"sku3a550")

println myXMLDoc

Sortie du programme :

<workbook>
<worksheet caption='Employees'>
<row fname="John" lname="McDoe" />
<row fname="Nancy" lname="Davolio" />
</worksheet>
<worksheet caption='Products'>
<row name="Veeblefeetzer" id="sku34510" />
<row name="Prune Unit Zappa" id="sku3a550" />
</worksheet>
</workbook>

## Autres exemples

[modifier | modifier le code]

Hello World :

print "hello world"

def name='World'; println "Hello $name!"

Afficher une liste ordonnée de noms transformés en majuscules :

def names = ['Jean', 'John', 'Jill']
println names.collect{ it.toUpperCase() }.sort()

Afficher les sept premiers carrés successifs de 2 :

def num = 2G
7.times {
println "$num"
num *= num

Définir des classes utilisateur :

class Person {
String name
String givenname
int age
String sex

class User extends Person {
String userid
String email

def titi = new User(name: 'titi')
titi.userid = 'titi1412'
titi.email = 'titi@acme.org'
titi.age = 40

def rominet = new Person(name: 'rominet', age: 40, sex: 'uhum')
println "Hé ${rominet.name} , ici ${titi.name}, un vieux copain de promo. Écris-moi sur ${titi.email} !"

## Annexes

[modifier | modifier le code]

### Liens externes

[modifier | modifier le code]

* (en) Groovy
* (fr) Une page consacrée à Groovy

### Notes et références

[modifier | modifier le code]

1. ↑ a et b « Release 4.0.27 », 24 mai 2025 (consulté le 25 mai 2025)
2. ↑ (en) « JSR 241: The Groovy Programming Language », sur jpc.org

v · m

Java

* Oracle
* Sun Microsystems

Technologie |

* Langage Java
* Plateforme
* Environnement de développement (JDK)
* Machine virtuelle Java (JVM)
* Environnement d’exécution (JRE)

Général |

* Java Community Process

Framework |

* Micro Edition (ME)
* Standard Edition (SE)
* Jakarta EE
* Java Card
* JavaFX

Techniques |

* Bytecode
* Applets
* Servlets
* Scriptlets
* JavaServer Pages
* .class
* Javadoc

Langages de programmation |

* Ceylon
* Clojure
* Fortress
* Groovy
* Java
* Kotlin
* Oxygene (en)
* Python (Jython)
* Ruby (JRuby)
* Scala
* Xtend

v · m

Langages de programmation

Concurrents |

* Ada
* Erlang
* Go
* Modula-2

Déclaratifs |

* Clips
* Prolog
* Mercury

Fonctionnels |

* Clojure
* Common Lisp
* Erlang
* F#
* Gallina
* Haskell
* Lisp
* ML
* OCaml
* Opa
* Scheme
* Standard ML

Impératifs |

* Algol
* APL
* Assembleur
* Basic
* BCPL
* C
* Cobol
* DOPE
* Forth
* Fortran
* Julia
* Limbo
* Lua
* Modula-2
* MUMPS
* Natural
* NQC
* NXC
* OPL
* Pascal
* Perl
* PL/I
* RPG
* PowerShell
* Rust
* Tcl
* WLangage

Orientés objet |

* ActionScript
* AppleScript
* C++
* C#
* CoffeeScript
* D
* Delphi
* Eiffel
* Groovy
* Haxe
* Java
* JavaScript
* Lisaac
* Logo
* Objective-C
* PHP
* Python
* Ruby
* Scala
* Scratch
* Simula
* Smalltalk
* Swift
* Kotlin
* Visual Basic

* Liste de langages de programmation

* Portail de la programmation informatique

*[(en)]: Langue : anglais
*[(fr)]: Langue : français
*[v]: Voir ce modèle.
*[m]: Modifier ce modèle. Merci de prévisualiser avant de sauvegarder.