Java 9 - Erkundung der REPL

Java 9 - Erkundung der REPL

1. Einführung

In diesem Artikel geht es umjshell, eine interaktiveREPL-Konsole (Read-Evaluate-Print-Loop), die im JDK für die kommende Java 9-Version enthalten ist. Für diejenigen, die mit dem Konzept nicht vertraut sind, können mit einer REPL beliebige Codeausschnitte interaktiv ausgeführt und deren Ergebnisse ausgewertet werden.

Eine REPL kann nützlich sein für Dinge wie das schnelle Überprüfen der Realisierbarkeit einer Idee oder das Herausfinden von z.B. eine formatierte Zeichenfolge fürString oderSimpleDateFormat.

2. Laufen

Um anzufangen, müssen wir die REPL ausführen, indem wir Folgendes aufrufen:

$JAVA_HOME/bin/jshell

Wenn detailliertere Nachrichten von der Shell gewünscht werden, kann ein-v-Flag verwendet werden:

$JAVA_HOME/bin/jshell -v

Sobald es fertig ist, werden wir von einer freundlichen Nachricht und einer vertrauten Unix-Eingabeaufforderung am unteren Rand begrüßt.

3. Methoden definieren und aufrufen

Methoden können durch Eingabe von Signatur und Text hinzugefügt werden:

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

Hier haben wir die allgegenwärtige „Hallo Welt“ -Methode definiert. Es kann mit normaler Java-Syntax aufgerufen werden:

jshell> helloWorld()
Hello world

4. Variablen

Variablen können mit der normalen Java-Deklarationssyntax definiert werden:

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

Beachten Sie, dass Semikolons optional sind. Variablen können auch ohne Initialisierung deklariert werden:

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

5. Ausdrücke

Jeder gültige Java-Ausdruck wird akzeptiert und das Ergebnis der Auswertung wird angezeigt. Wenn kein expliziter Empfänger des Ergebnisses angegeben wird, werden "Rubbel" -Variablen erstellt:

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

Die REPL ist hier sehr hilfreich, indem sie uns mitteilt, dass sie eine Kratzvariable mit dem Namen$6 erstellt hat, deren Wert "100 Flaschen Bier an der Wand" ist und deren TypString ist.

Auch mehrzeilige Ausdrücke sind möglich. 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

Beachten Sie, wie sich die Eingabeaufforderung in ein eingerücktes…>geändert hat, um die Fortsetzung eines Ausdrucks anzuzeigen.

6. Befehle

Jshell bietet einige Meta-Befehle, die sich nicht auf die Auswertung von Java-Anweisungen beziehen. Sie beginnen alle mit einem Schrägstrich (/), der sich vom normalen Betrieb unterscheidet. Zum Beispiel können wir eine Liste aller verfügbaren Befehle anfordern, indem wir/help oder /? Ausgeben.

Schauen wir uns einige davon an.

6.1. Importe

Um alle in der aktuellen Sitzung aktiven Importe aufzulisten, können Sie den Befehl/import verwenden:

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.*

Wie wir sehen können, beginnt die Shell mit einigen nützlichen Importen, die bereits hinzugefügt wurden.

6.2. Listen

Die Arbeit mit einer REPL ist bei weitem nicht so einfach wie die Verfügbarkeit einer voll ausgestatteten IDE: Man vergisst leicht, welche Variablen welche Werte haben, welche Methoden definiert wurden und so weiter. Um den Zustand der Shell zu überprüfen, können wir/var,/methods,/list oder/history: verwenden

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

Der Unterschied zwischen/list und/history besteht darin, dass letzteres neben Ausdrücken auch Befehle anzeigt.

6.3. Sparen

Um den Ausdrucksverlauf zu speichern, kann der Befehl/saveverwendet werden:

jshell> /save repl.java

Dadurch wird unser Ausdrucksverlauf inrepl.java in demselben Verzeichnis gespeichert, in dem wir den Befehljshell ausgeführt haben.

6.4. Wird geladen

Um eine zuvor gespeicherte Datei zu laden, können Sie den Befehl/open verwenden:

jshell> /open repl.java

Eine geladene Sitzung kann dann überprüft werden, indem/var,/method oder/list ausgegeben werden.

6.5. Verlassen

Wenn wir mit der Arbeit fertig sind, kann der Befehl/exit die Shell beenden:

jshell> /exit
|  Goodbye

Auf Wiedersehenjshell.

7. Fazit

In diesem Artikel haben wir uns Java 9 REPL angesehen. Da es Java bereits seit über 20 Jahren gibt, ist es vielleicht etwas spät angekommen. Es sollte sich jedoch als ein weiteres wertvolles Tool in unserer Java-Toolbox erweisen.