Рубрики
Без рубрики

Java 9 – Изучение REPL

Краткое введение в оболочку, интерактивную консоль REPL (Read-Evaluate-Print-Loop) в комплекте с JDK 9.

Автор оригинала: baeldung.

1. введение

Эта статья посвящена jshell , интерактивной консоли REPL (Read-Evaluate-Print-Loop), которая поставляется в комплекте с JDK для предстоящего выпуска Java 9. Для тех, кто не знаком с этой концепцией, ОТВЕТ позволяет в интерактивном режиме запускать произвольные фрагменты кода и оценивать их результаты.

ОТВЕТ может быть полезен для таких вещей, как быстрая проверка жизнеспособности идеи или выяснение, например, форматированной строки для String или SimpleDateFormat .

2. Бег

Для начала нам нужно запустить REPL, что делается путем вызова:

$JAVA_HOME/bin/jshell

Если требуется более подробное сообщение из оболочки, можно использовать флаг -v :

$JAVA_HOME/bin/jshell -v

Как только он будет готов, нас встретит дружелюбное сообщение и знакомая подсказка в стиле Unix внизу.

3. Определение и вызов методов

Методы можно добавить, введя их подпись и тело:

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

Здесь мы определили вездесущий метод “привет, мир”. Он может быть вызван с помощью обычного синтаксиса Java:

jshell> helloWorld()
Hello world

4. Переменные

Переменные могут быть определены с помощью обычного синтаксиса объявления 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

Обратите внимание, что точки с запятой необязательны. Переменные также могут быть объявлены без инициализации:

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

5. Выражения

Любое допустимое выражение Java принимается, и результат оценки будет показан. Если явного получателя результата не предусмотрено, будут созданы переменные “нуля”:

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

ОТВЕТ здесь весьма полезен, сообщив нам, что он создал переменную scratch с именем $6 , значение которой равно “100 бутылок пива на стене”, а ее тип – String .

Также возможны многострочные выражения. Shell достаточно умен, чтобы знать, когда выражение является неполным, и предложит пользователю продолжить в новой строке:

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

Обратите внимание, как приглашение изменилось на …> , чтобы обозначить продолжение выражения.

6. Команды

Оболочка предоставляет довольно много мета-команд, которые не связаны с оценкой операторов Java. Все они начинаются с косой черты (/), которую следует отличать от обычных операций. Например, мы можем запросить список всех доступных команд, выдав /help или/?.

Давайте взглянем на некоторые из них.

6.1. Импорт

Чтобы перечислить все импортные операции, активные в текущем сеансе, мы можем использовать команду /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.*

Как мы видим, оболочка начинается с того, что уже добавлено довольно много полезных импорта.

6.2. Списки

Работать в REPL не так просто, как иметь под рукой полнофункциональную IDE: легко забыть, какие переменные имеют какие значения, какие методы были определены и так далее. Для проверки состояния оболочки мы можем использовать /var , /методы , /список или /историю:

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

Разница между /list и /history заключается в том, что последний показывает команды в дополнение к выражениям.

6.3. Сохранение

Для сохранения истории выражений можно использовать команду /save :

jshell> /save repl.java

Это сохраняет нашу историю выражений в repl.java в том же каталоге, из которого мы запустили команду shell .

6.4. Загрузка

Чтобы загрузить ранее сохраненный файл, мы можем использовать команду /open :

jshell> /open repl.java

Загруженный сеанс затем можно проверить, выдав /var , /метод или /список .

6.5. Выход

Когда мы закончим работу, команда /exit может завершить работу оболочки:

jshell> /exit
|  Goodbye

До свидания jshell .

7. Заключение

В этой статье мы рассмотрели Java 9 REPL. Поскольку Java существует уже более 20 лет, возможно, она появилась немного поздно. Тем не менее, он должен оказаться еще одним ценным инструментом в нашем наборе инструментов Java.