Java 9 - Udforskning af REPL

1. Introduktion

Denne artikel handler om jshell, en interaktiv REPL (Læs-Evaluer-Print-Loop) konsol, der følger med JDK til den kommende Java 9-udgivelse. For dem, der ikke er bekendt med konceptet, tillader en REPL interaktivt at køre vilkårlige kodestykker og evaluere deres resultater.

En REPL kan være nyttig til ting som hurtigt at kontrollere levedygtigheden af ​​en idé eller finde ud af f.eks. en formateret streng til Snor eller SimpleDateFormat.

2. Løb

For at komme i gang er vi nødt til at køre REPL, hvilket gøres ved at påkalde:

$ JAVA_HOME / bin / jshell

Hvis der ønskes mere detaljeret besked fra skallen, a -v flag kan bruges:

$ JAVA_HOME / bin / jshell -v

Når den er klar, bliver vi mødt af en venlig besked og en velkendt Unix-stil-prompt i bunden.

3. Definition og påkaldelse af metoder

Metoder kan tilføjes ved at skrive deres signatur og brødtekst:

jshell> ugyldigt helloWorld () {System.out.println ("Hej verden");} | oprettet metode helloWorld ()

Her definerede vi den allestedsnærværende "hej verden" -metode. Det kan påberåbes ved hjælp af normal Java-syntaks:

jshell> helloWorld () Hej verden

4. Variabler

Variabler kan defineres med den normale Java-deklarationssyntaks:

jshell> int i = 0; i ==> 0 | oprettet variabel i: int jshell> String company = "Baeldung" company ==> "Baeldung" | oprettet variabel virksomhed: String jshell> Dato dato = ny Dato () dato ==> Sø 26. feb 06:30:16 EST 2017 | oprettet variabel dato: Dato

Bemærk, at semikolon er valgfri. Variabler kan også erklæres uden initialisering:

jshell> Filfilfil ==> null | oprettet variabelfil: Fil

5. Udtryk

Ethvert gyldigt Java-udtryk accepteres, og resultatet af evalueringen vises. Hvis der ikke gives nogen eksplicit modtager af resultatet, oprettes "ridse" -variabler:

jshell> String.format ("% d flasker øl", 100) $ 6 ==> "100 flasker øl" | oprettet scratch variabel $ 6: String

REPL er ret nyttigt her ved at informere os om, at det oprettede en navne på scratch-variablen $6 hvilken værdi er "100 flasker øl på væggen" og dens type er Snor.

Multi-line udtryk er også mulige. Jshell er smart nok til at vide, hvornår et udtryk er ufuldstændigt og vil bede brugeren om at fortsætte på en ny linje:

jshell> int i = ...> 5; i ==> 5 | ændret variabel i: int | opdatering overskrevet variabel i: int

Bemærk hvordan prompten blev ændret til et indrykket …> at betegne fortsættelsen af ​​et udtryk.

6. Kommandoer

Jshell giver en hel del metakommandoer, der ikke er relateret til evaluering af Java-udsagn. De starter alle med en skråstreg (/), der skelnes fra normal drift. For eksempel kan vi anmode om en liste over alle tilgængelige kommandoer ved at udstede /Hjælp eller / ?.

Lad os se på nogle af dem.

6.1. Import

For at liste alle de importer, der er aktive i den aktuelle session, kan vi bruge /importere kommando:

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

Som vi kan se, starter skallen med en hel del nyttige importer, der allerede er tilføjet.

6.2. Lister

At arbejde i en REPL er ikke nær så let som at have en komplet IDE lige ved hånden: det er let at glemme, hvilke variabler der har hvilke værdier, hvilke metoder der er defineret osv. For at kontrollere skallenes tilstand, vi kan bruge / var, /metoder, /liste eller /historie:

jshell> / var | int i = 0 | Stringfirma = "Baeldung" | Dato dato = søn 26 feb 06:30:16 EST 2017 | Filfil = null | String $ 6 = "100 flasker øl på væggen" jshell> / metoder | ugyldigt helloWorld () jshell> / liste 1: ugyldigt helloWorld () {System.out.println ("Hej verden");} 2: int i = 0; 3: Stringfirma = "Baeldung"; 4: Dato dato = ny dato (); 5: Filfil; 6: String.format ("% d af flasker øl på væggen", 100) jshell> / history void helloWorld () {System.out.println ("Hello world");} int i = 0; Stringfirma = "Baeldung" Dato dato = ny dato () Filfil String.format ("% d flasker øl på væggen", 100) / var / metoder / liste / historie 

Forskellen på /liste og /historie er, at sidstnævnte viser kommandoer ud over udtryk.

6.3. Gemmer

For at gemme udtrykshistorikken /Gemme kommando kan bruges:

jshell> / gem repl.java 

Dette gemmer vores udtrykshistorie i repl.java i den samme mappe, hvorfra vi kørte jshell kommando.

6.4. Indlæser

For at indlæse en tidligere gemt fil kan vi bruge /åben kommando:

jshell> / åben repl.java 

En indlæst session kan derefter bekræftes ved udstedelse / var, /metode eller /liste.

6.5. Afslutter

Når vi er færdige med arbejdet, /Afslut kommando kan afslutte skallen:

jshell> / exit | Farvel

Farvel jshell.

7. Konklusion

I denne artikel kiggede vi på Java 9 REPL. Da Java allerede har eksisteret i over 20 år, ankom det måske lidt sent. Det skal dog vise sig at være et andet værdifuldt værktøj i vores Java-værktøjskasse.