31 votes

La syntaxe Groovy est-elle un sur-ensemble exact de la syntaxe Java ?

Étant un programmeur Java, je n'ai pas vraiment de connaissances en Groovy, mais j'utilise beaucoup Groovy ces derniers temps pour étendre Maven (en utilisant GMaven). Jusqu'à présent, j'ai pu utiliser tout le code Java dont j'ai besoin en Groovy, avec le sucre Groovy ajouté (méthodes de métaclasses, plus d'opérateurs, fermetures). Ma connaissance de Groovy est loin d'être complète, mais je l'aime bien, surtout pour les scripts (je suis un peu prudent quant à l'utilisation d'un langage non statique typé dans un scénario d'entreprise, mais ce n'est pas le sujet ici).

Quoi qu'il en soit, la question est la suivante :

Chaque morceau de code Java valide est-il automatiquement un code Groovy valide ? (Je parle du code source, pas des classes compilées, je sais que Groovy peut interagir avec les classes Java). Ou y a-t-il des constructions Java qui sont illégales dans Groovy ? Peut-être un mot-clé Groovy réservé qui pourrait être utilisé comme un identifiant en Java, ou autre chose ? Ou est-ce que Groovy a été délibérément conçu pour être 100% compatible avec Java ?

21voto

ataylor Points 31154

Nope. Les éléments suivants sont des mots-clés dans groovy, mais pas dans Java :

any    as     def    in     with

En outre, même si ce ne sont pas des mots-clés, delegate y owner ont une signification particulière dans les fermetures et peuvent vous faire trébucher si vous ne faites pas attention.

En outre, il existe quelques différences mineures dans la syntaxe du langage. Par exemple, Java est plus souple quant à l'emplacement des accolades de tableau dans les déclarations :

public static void main(String args[]) // valid java, error in groovy

Groovy est analysé différemment, aussi. Voici un exemple :

public class Test {
    public static void main(String[] args) {
        int i = 0;
        i = 5
        +1;
        System.out.println(i);
    }
}

Java imprimera 6, groovy imprimera 5.

Bien que le code source de groovy soit en grande partie compatible avec celui de java, il y a beaucoup de cas particuliers qui ne sont pas les mêmes. Cela dit, il est très compatible avec le code que les gens écrivent réellement.

17voto

Goran Jovic Points 5882

Ce n'est pas le cas.

Mon incompatibilité préférée : les tableaux littéraux :

String[] s = new String[] {"a", "b", "c"};

En Groovy, les accolades dans ce contexte sont censées contenir une fermeture, et non un tableau littéral.

12voto

tim_yates Points 63521

Il y a une page sur le site Groovy qui documente certaines des différences, et une autre page qui liste les gotchas (comme le saut de ligne)

Il y a aussi d'autres choses, par exemple le fait que Groovy ne supporte pas l'option do...while construction en boucle

5voto

Dónal Points 61837

D'autres ont déjà donné des exemples de syntaxe Java qui est illégale dans Groovy (par exemple, les tableaux littéraux). Il est également utile de rappeler que certaines syntaxes qui sont légales dans les deux langues ne signifient pas la même chose dans les deux langues. Par exemple, en Java :

foo == bar

des tests d'identité, c'est-à-dire faire foo y bar les deux font référence au même objet ? En Groovy, cela teste l'égalité des objets, c'est-à-dire que cela renvoie le résultat de foo.equals(bar)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X