Java 9 - Explorer le REPL

Java 9 - Explorer le REPL

1. introduction

Cet article concernejshell, une console interactiveREPL (lecture-évaluation-impression-boucle) fournie avec le JDK pour la prochaine version de Java 9. Pour ceux qui ne connaissent pas le concept, un REPL permet d'exécuter de manière interactive des extraits de code arbitraires et d'évaluer leurs résultats.

Une REPL peut être utile, par exemple, pour vérifier rapidement la viabilité d’une idée ou pour déterminer, par exemple, une chaîne formatée pourString ouSimpleDateFormat.

2. Fonctionnement

Pour commencer, nous devons exécuter le REPL, ce qui se fait en appelant:

$JAVA_HOME/bin/jshell

Si une messagerie plus détaillée du shell est souhaitée, un indicateur-v peut être utilisé:

$JAVA_HOME/bin/jshell -v

Une fois prêt, nous serons accueillis par un message amical et une invite familière de style Unix en bas.

3. Définition et appel de méthodes

Des méthodes peuvent être ajoutées en tapant leur signature et leur corps:

jshell> void helloWorld() { System.out.println("Hello world");}
|  created method helloWorld()

Ici, nous avons défini la méthode omniprésente «hello world». Il peut être appelé en utilisant la syntaxe Java normale:

jshell> helloWorld()
Hello world

4. Variables

Les variables peuvent être définies avec la syntaxe de déclaration Java normale:

jshell> int i = 0;
i ==> 0
|  created variable i : int

jshell> String company = "example"
company ==> "example"
|  created variable company : String

jshell> Date date = new Date()
date ==> Sun Feb 26 06:30:16 EST 2017
|  created variable date : Date

Notez que les points-virgules sont facultatifs. Les variables peuvent également être déclarées sans initialisation:

jshell> File file
file ==> null
|  created variable file : File

5. Expressions

Toute expression Java valide est acceptée et le résultat de l'évaluation sera affiché. Si aucun destinataire explicite du résultat n'est fourni, des variables «scratch» seront créées:

jshell> String.format("%d of bottles of beer", 100)
$6 ==> "100 of bottles of beer"
|  created scratch variable $6 : String

Le REPL est très utile ici en nous informant qu'il a créé une variable scratch nommée$6 dont la valeur est «100 bouteilles de bière sur le mur» et son type estString.

Les expressions multi-lignes sont également possibles. Jshell is smart enough to know when an expression is incomplete and will prompt the user to continue on a new line:

jshell> int i =
   ...> 5;
i ==> 5
|  modified variable i : int
|    update overwrote variable i : int

Notez comment l'invite a changé en un…> indenté pour signifier la continuation d'une expression.

6. Commandes

Jshell fournit un certain nombre de méta-commandes qui ne sont pas liées à l'évaluation des instructions Java. Ils commencent tous par une barre oblique (/) à distinguer des opérations normales. Par exemple, nous pouvons demander une liste de toutes les commandes disponibles en émettant/help ou / ?.

Jetons un coup d'œil à certains d'entre eux.

6.1. Importations

Pour lister toutes les importations actives dans la session en cours, nous pouvons utiliser la commande/import:

jshell> /import
|    import java.io.*
|    import java.math.*
|    import java.net.*
|    import java.nio.file.*
|    import java.util.*
|    import java.util.concurrent.*
|    import java.util.function.*
|    import java.util.prefs.*
|    import java.util.regex.*
|    import java.util.stream.*

Comme nous pouvons le constater, le shell commence par quelques importations utiles déjà ajoutées.

6.2. Listes

Travailler dans un REPL n’est pas aussi facile que d’avoir un IDE complet à portée de main: il est facile d’oublier quelles variables ont quelles valeurs, quelles méthodes ont été définies, etc. Pour vérifier l'état du shell, nous pouvons utiliser/var,/methods,/list ou/history:

jshell> /var
| int i = 0
| String company = "example"
| Date date = Sun Feb 26 06:30:16 EST 2017
| File file = null
| String $6 = "100 of bottles of beer on the wall"

jshell> /methods
| void helloWorld()

jshell> /list

 1 : void helloWorld() { System.out.println("Hello world");}
 2 : int i = 0;
 3 : String company = "example";
 4 : Date date = new Date();
 5 : File file;
 6 : String.format("%d of bottles of beer on the wall", 100)

jshell> /history

void helloWorld() { System.out.println("Hello world");}
int i = 0;
String company = "example"
Date date = new Date()
File file
String.format("%d of bottles of beer on the wall", 100)
/var
/methods
/list
/history

La différence entre/list et/history est que ce dernier affiche des commandes en plus des expressions.

6.3. Économie

Pour enregistrer l'historique des expressions, la commande/save peut être utilisée:

jshell> /save repl.java

Cela enregistre l'historique de nos expressions dansrepl.java dans le même répertoire à partir duquel nous avons exécuté la commandejshell.

6.4. Chargement

Pour charger un fichier précédemment enregistré, nous pouvons utiliser la commande/open:

jshell> /open repl.java

Une session chargée peut ensuite être vérifiée en émettant/var,/method ou/list.

6.5. Quitter

Lorsque nous avons terminé le travail, la commande/exit peut terminer le shell:

jshell> /exit
|  Goodbye

Au revoirjshell.

7. Conclusion

Dans cet article, nous avons examiné Java 9 REPL. Comme Java existe déjà depuis plus de 20 ans, il est peut-être arrivé un peu tard. Cependant, il devrait s’avérer être un autre outil précieux de notre boîte à outils Java.