Java 9 - Esplorazione di REPL

1. Introduzione

Questo articolo riguarda jshell , una console REPL (Read-Evaluate-Print-Loop) interattiva fornita in bundle con JDK per la prossima versione di Java 9. Per coloro che non hanno familiarità con il concetto, un REPL consente di eseguire in modo interattivo frammenti di codice arbitrari e valutarne i risultati.

Un REPL può essere utile per cose come controllare rapidamente la fattibilità di un'idea o capire, ad esempio, una stringa formattata per String o SimpleDateFormat .

2. In esecuzione

Per iniziare dobbiamo eseguire REPL, che viene fatto invocando:

$JAVA_HOME/bin/jshell

Se si desidera una messaggistica più dettagliata dalla shell, è possibile utilizzare un flag -v :

$JAVA_HOME/bin/jshell -v

Una volta pronto, saremo accolti da un messaggio amichevole e da un familiare prompt in stile Unix in fondo.

3. Definizione e invocazione di metodi

I metodi possono essere aggiunti digitando la loro firma e il corpo:

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

Qui abbiamo definito l'onnipresente metodo "ciao mondo". Può essere richiamato utilizzando la normale sintassi Java:

jshell> helloWorld() Hello world

4. Variabili

Le variabili possono essere definite con la normale sintassi della dichiarazione Java:

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

Nota che il punto e virgola è facoltativo. Le variabili possono anche essere dichiarate senza inizializzazione:

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

5. Espressioni

Qualsiasi espressione Java valida viene accettata e verrà visualizzato il risultato della valutazione. Se non viene fornito alcun destinatario esplicito del risultato, verranno create le variabili "zero":

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

Il REPL è molto utile qui informandoci che ha creato una variabile scratch denominata $ 6 il cui valore è "100 di bottiglie di birra sul muro" e il suo tipo è String .

Sono possibili anche espressioni su più righe. Jshell è abbastanza intelligente da sapere quando un'espressione è incompleta e chiederà all'utente di continuare su una nuova riga:

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

Nota come il prompt è cambiato in un rientro ...> per indicare la continuazione di un'espressione.

6. Comandi

Jshell fornisce alcuni meta-comandi non correlati alla valutazione delle istruzioni Java. Iniziano tutti con una barra (/) per distinguersi dalle normali operazioni. Ad esempio, possiamo richiedere un elenco di tutti i comandi disponibili immettendo / help o / ?.

Diamo un'occhiata ad alcuni di loro.

6.1. Importazioni

Per elencare tutte le importazioni attive nella sessione corrente possiamo usare il comando / 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.*

Come possiamo vedere, la shell inizia con alcune utili importazioni già aggiunte.

6.2. Liste

Lavorare in un REPL non è così facile come avere un IDE completo a portata di mano: è facile dimenticare quali variabili hanno quali valori, quali metodi sono stati definiti e così via. Per controllare lo stato della shell possiamo usare / var , / methods , / list o / 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 differenza tra / list e / history è che quest'ultima mostra i comandi oltre alle espressioni.

6.3. Salvataggio

Per salvare la cronologia delle espressioni è possibile utilizzare il comando / save :

jshell> /save repl.java 

Questo salva la nostra cronologia delle espressioni in repl.java nella stessa directory da cui abbiamo eseguito il comando jshell .

6.4. Caricamento in corso

Per caricare un file salvato in precedenza possiamo usare il comando / open :

jshell> /open repl.java 

Una sessione caricata può quindi essere verificata immettendo / var , / method o / list .

6.5. Uscita

Quando abbiamo finito con il lavoro, il comando / exit può terminare la shell:

jshell> /exit | Goodbye

Arrivederci jshell .

7. Conclusione

In questo articolo, abbiamo esaminato Java 9 REPL. Dato che Java esiste già da oltre 20 anni, forse è arrivato un po 'in ritardo. Tuttavia, dovrebbe rivelarsi un altro prezioso strumento nel nostro toolbox Java.