Java 9 - Explorer le REPL

1. Introduction

Cet article concerne jshell , une console interactive REPL (Read-Evaluate-Print-Loop) qui est fournie avec le JDK pour la prochaine version de Java 9. Pour ceux qui ne sont pas familiers avec 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 pour des choses telles que vérifier rapidement la viabilité d'une idée ou comprendre par exemple une chaîne formatée pour String ou SimpleDateFormat .

2. Course à pied

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 qu'il est 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

Les 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 = "Baeldung" company ==> "Baeldung" | 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 récepteur 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 est String .

Les expressions multilignes sont également possibles. Jshell est suffisamment intelligent pour savoir quand une expression est incomplète et invitera l'utilisateur à continuer sur une nouvelle ligne:

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

Notez comment l'invite est devenue indentée …> pour signifier la continuation d'une expression.

6. Commandes

Jshell fournit quelques méta-commandes qui ne sont pas liées à l'évaluation des instructions Java. Ils commencent tous par une barre oblique (/) pour être distingués 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 voir, le shell démarre avec quelques importations utiles déjà ajoutées.

6.2. Listes

Travailler dans une REPL n'est pas aussi simple 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 = "Baeldung" | 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 = "Baeldung"; 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 = "Baeldung" 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 dans repl.java dans le même répertoire à partir duquel nous avons exécuté la commande jshell .

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 revoir jshell .

7. Conclusion

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