Académique Documents
Professionnel Documents
Culture Documents
Xtend
Programming Language
Ayoub SABRAOUI
Eclipse Project
• Part of Eclipse Modeling
1
17/03/2020
Introduction
Xtend est livré avec une documentation, accessible sur son site
web: https://www.eclipse.org/xtend/documentation
3
Introduction
2
17/03/2020
Pour créer un nouveau fichier Xtend, par exemple une classe Xtend, cliquez avec le
bouton droit de la souris sur votre dossier source et sélectionnez Nouveau | Classe
Xtend.
Un nouveau dossier source xtend-gen sera créé dans votre projet, contenant le code
java correspondant à votre code Xtend.
6
3
17/03/2020
La vue Xtend Generated Code permet d’afficher le code Java généré correspondant au
code Xtend sélectionné. Mise à jour à chaque nouvel enregistrement du fichier Xtend.
L’exécution du fichier Xtend se fait en cliquant sur le bouton droit de la souris, puis sur:
Run As | Java Application
8
4
17/03/2020
Les types
Les types
Dans une classe Xtend, on peut définir autant de constructeurs
que l'on veut, en utilisant le mot-clé new, sans utiliser le nom de
la classe.
5
17/03/2020
Les méthodes
Une méthode Xtend est déclarée en commençant par def ou override,
elle est publique par défaut.
Exemples:
i. La méthode suivante déclenchera une erreur de compilation, puisque nous
aurions dû utiliser override au lieu de def :
11
ii. Il est impossible de redéfinir une méthode finale.
Les méthodes
Dans Xtend, il n’y a pas d’instructions, tout est expression.
6
17/03/2020
Les méthodes
Comme dans Java, les paramètres vararg sont autorisés et accessibles sous
forme de tableaux dans le corps de la méthode:
Il est possible de déduire le type de retour d'une méthode à partir de son corps. Les
méthodes récursives et les méthodes abstraites doivent explicitement déclarer un
type de retour.
13
Les méthodes
Méthodes abstraites
Une méthode abstraite ne définit pas de corps et doit être déclarée dans
une classe abstraite ou une interface. Il est également obligatoire de
spécifier le type de retour, car il ne peut pas être inféré.
Méthodes génériques
Xtend introduit les types paramétrés (generic) sur les méthodes.
14
7
17/03/2020
Les méthodes
class Money {
def + (Money other) { ... }
def - (Money other) { ... }
def * (BigDecimal times) { ... }
...
}
15
8
17/03/2020
Les opérateurs
Les opérateurs arithmétiques sont étendus aux listes. Par exemple, lors
de l’exécution du code suivant :
On obtient
17
Par exemple:
18
9
17/03/2020
Tout comme dans Java, l’accès aux membres des types se fait en
utilisant l’opérateur point (.)
To Java
19
20
10
17/03/2020
Les littérales sont spécifiés dans Xtend comme dans Java mais avec
quelques exceptions.
• String littérale: ,
• Booléen littérale: true et false
• Null littérale: même sémantique que dans Java
• Collection et tableau littérale:
22
11
17/03/2020
23
24
12
17/03/2020
La variable implicite - it
26
13
17/03/2020
Les constructeurs
27
Condition if
Une structure if est utilisée pour choisir entre deux valeurs différentes
basées sur un prédicat.
L’expression:
if (p) e1 else e2
La partie else est optionnelle ce qui est un raccourci pour une branche else qui
retourne la valeur par défaut du type courant.
if (p) e1 Est un raccourci de: if (p) e1 else null
La structure if est une expression qui retourne une valeur. Par conséquent,
on peut l’utiliser comme expression imbriquée dans d’autres expressions :
val nom = if (prenom != null) prenom + ' ' + nom else nom
28
14
17/03/2020
La structure Switch
29
La structure Switch
Exemple:
def String switchExample(Entity e, Entity specialEntity) {
switch e {
case e.name.length > 0 : "a un nom"
case e.superType != null : "a un super type"
case specialEntity : "est un type special"
default: ""
}
}
15
17/03/2020
La structure Switch
La structure Switch
Autre utilisation du switch: combiner deux conditions, une du case et
l’autre sur le type utilisé.
def length (Object x) {
switch x {
String case x.length > 0 : x.length //length est défini pour String
List<?> : x.size // size est défini pour List
default : -1
}
}
16
17/03/2020
La boucle for
for est utilisé pour exécuter une certaine expression pour chaque élément
d’un tableau ou d’une instance de Iterable. La variable locale est finale,
donc ne peut pas être mise à jour.
for (T variable : tableauOuIterable) expression
Le type de for est void. Le type de la variable locale peut être inféré à partir
du tableau ou de iterable.
for (String s : myChaine) {
faireQlqChose(s)
}
for (s : maChaine)
faireQlqChose(s)
while et do-while
La boucle while
while (predicate) expression
Exemple:
while (true) {
uneFonction("string")
}
La boucle do-while
do expression while (predicate)
Exemple:
do
uneFonction("string")
while ((i=i+1)<max)
34
17
17/03/2020
Autres opérateurs
L’opérateur (" ?. ")
Très souvent, vous devrez vérifier si un objet n’est pas nul avant d’invoquer une
méthode; autrement, vous pouvez vouloir retourner null ou tout simplement
n’exécuter pas l’opération.
Xtend fournit l’opérateur "?." qui est une version sûre de l’opérateur de sélection (.)
Écrire o?.m correspond à if(o!=null) o.m
Ceci est particulièrement utile lorsque vous avez des sélections en cascade, par
exemple: o?.f?.m
Autres opérateurs
L’opérateur de cast: as
Le transtypage (ou cast) en Xtend est fait en utilisant l’opérateur as. Ainsi,
l’expression Xtend: e as T est équivalente à l’expression Java: (T)e
L’opérateur instanceof
Lorsqu’on utilise instanceof comme condition d’une expression if, Xtend effectue
automatiquement une conversion vers le type correspondant dans le corps de la
branche if. Ceci est illustré dans l'exemple suivant, où les transtypages sont implicites
et ne sont pas nécessaires:
18