:: Enseignements :: ESIPE :: E4INFO :: 2018-2019 :: Java Inside ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
Expression Switch et Concise Methods
|
Expression Switch et Concise Methods
Exercice 1 - Expression switch
Le but de cet exercice est d'utiliser la nouvelle syntax
expression switch introduite
par la
JEP 325 dans Java 12.
Comme la version 12 de Java n'a pas encore été publié, Eclipse ne supporte ps encore la syntaxe,
donc il va falloir soit utiliser votre éditeur de texte préféré ou utiliser eclipse et faire
abstraction que les trucs soulignés en rouge.
Créer un répertoire
lab03 dans votre repository
java-inside
Ajouter la version de pro "amber" à votre
PATH
export PATH=$PATH:/home/ens/forax/java-inside/pro-jdk-12-amber
que nous utliserons aussi pour l'exercice 2.
-
Utiliser pro scaffold pour créer un nouveau projet.
Puis créer une classe ExprSwitches en recopiant le contenu de la classe Switches du lab2
Profiter en pour copier les tests aussi !
-
Modifier le fichier .travis.yml pour que le lab3 soit testé en parallèle des labs précédents.
(la variable d'environement pour le pro_wrapper.java est PRO_SPECIAL_BUILD='early-access-amber').
-
Dupliquer les méthodes existantes dans la classe ExprSwitches dans le but pour chaque méthode d'écrire
une version avec l'ancien switch (statement switch) et avec le nouveau switch (expression switch).
Préfixer les méthodes qui vont utiliser l'expression switch par "expr" (par ex. intSwitch devient exprIntSwitch)
Pour l'instant, ne modifier pas le contenu de ses méthodes par contre modifier le test unitaires pour tester ses nouvelles variantes
-
Modifier la méthode exprIntSwitch pour avoir un seul return devant le switch et remplacer les
return de chaque case par des break expression.
Comparer le bytecode généré pour les méthodes intSwitch et exprIntSwitch.
Que pouvez vous en conclure ?
Note: l'expression switch est une feature qui n'est pas activé par défaut, il faut ajouter dans
les paramètres du compilateur --enable-preview et indiquer que le compilateur utilise par défaut la version 12
compiler.
sourceRelease(12).
enablePreview(true)
et il faut faire aussi activé --enable-preview pour le docer et le runner
docer.
sourceRelease(12).
enablePreview(true)
runner.
enablePreview(true)
-
Modifier la méthode exprIntSwitch2 pour utiliser un seul return et la syntaxe arrow ("->").
Que doit-on faire dans le cas default ?
Comment doit-on résoudre le fallthrough ?
Regarder le bytecode générer, cela confirme t'il la conclusion que vous avez émit à la question précédente ?
-
Modifier toutes les méthodes commençant par expr pour qu'elle utilisent l'expression switch.
-
Expliquer, selon vous, les différentes raisons de l'ajout de l'expression switch au langage Java.
Exercice 2 - Concise Method Bodies
Pour la prochaine version de Java (la version 13), nous souhaitons introduire la notion de
concise method bodies,
décrite par un
premier draft.
Toujours en utlisant la version
/home/ens/forax/java-inside/pro-jdk-12-amber de
pro.
Le but de cet exercice est juste de tester le premier prototype et de remonter des bugs si vous en trouvé.
-
Créer un nouveau repertoire lab3b et utiliser pro scaffold pour créer un nouveau projet.
Note: il n'est pas nécessaire de configurer Eclipse car il ne reconnait pas encore la synstaxe proposée.
-
Utiliser un editeur de texte pour créer une classe HelloConciseMethod et écrivez plusieurs méthodes
utlisant des concise method bodies à base de lambda (expression et statement).
Utiliser pro pour builder et exécuter (le main de la classe Main générer par pro scaffold
peut appeler le main de votre classe HelloConciseMethod)
-
Ajouter une classe HelloConciseMethodRef et ajouter des méthodes qui montrer comment utiliser des méthodes réferences
en tant que concise method bodies.
Il y a un bonus si vous trouvez des bugs du compilo, normalement la première version de l'implantation est toujours farci de bugs.
© Université de Marne-la-Vallée