Java 9 был официально выпущен в сентябре прошлого года. Обновление включает в себя много крутых новых игрушек, поэтому я планирую потратить пару дней, чтобы все распаковать. Сегодня мы собираемся облегчить это, рассказав о JShell, новом инструменте Java Read-Evaluate-Print Loop (REPL).

Что такое РЕПЛ?

REPL — это интерактивная оболочка, которая позволяет запускать специальные операторы в терминале. Они были очень распространены среди крутых «сценарных» языков в течение достаточно долгого времени (Ruby, Python, Javascript и т. д.), но в последнее время к ним присоединились даже более скучные языки JVM (Scala и Groovy).

Основная идея заключается в том, что использование REPL позволяет разработчику быстро вносить изменения или создавать прототипы простого кода без необходимости выполнять полный цикл разработки «код —> компиляция —> запуск —> отладка —>».

Как я могу добраться до него?

Возьмите копию Java 9 JDK и установите ее. Как только это будет сделано, откройте терминал и введите jshell в командной строке.

очень просто.

Что я могу с этим сделать?

Практически вы можете ввести здесь любой действительный код Java и выполнить его по требованию. Давайте пробежимся по паре простых, чтобы начать.

Проще всего сделать простое присвоение переменной и вызов. Вы также заметите, что jshell сохраняет результат специальных выражений во временных переменных с префиксом $. Введя метакоманду /vars, вы увидите все это вместе с их текущими значениями.

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

Вы заметите, что jshell отслеживает созданные таким образом методы и дает вам возможность перечислить их с помощью метакоманды /methods. По умолчанию эти методы неявно static и будут существовать только в течение сеанса jshell. Это может быть расширено до создания полных классов и тому подобного.

Говоря о классах, можно получить прямой доступ к любому другому классу Java, как в реальном файле. Если написание полного имени пакета занимает слишком много времени, вы можете использовать ключевое слово import.

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

Я был немного удивлен, обнаружив, что не похоже, что можно легко загружать файлы классов из-за пределов jshell. Я надеялся, что смогу импортировать, скажем, один файл из внешнего проекта, чтобы возиться с ним. Вместо этого вам нужно добавить целые файлы .jar в путь к вашему классу при загрузке jshell.

И последнее, что мне показалось довольно крутым, — это возможность включить подробное ведение журнала, чтобы получить больше информации о том, что jshell делает под капотом. Это делается через опцию — feedback при загрузке jshell.

Существуют и другие метакоманды, которые можно использовать для получения дополнительной информации о текущем состоянии среды. Вы можете получить полезный их список, набрав /help в командной строке.

Когда все будет готово, введите /exit, чтобы выйти. Круто, правда?

Вывод

Добавление системы REPL в Java — интересный шаг. Одним из наиболее интересных моментов является то, что он также предоставляет API, который позволяет IDE или другим приложениям использовать его в своих интересах. Мне интересно посмотреть, что это будет означать на практике.

Это 9-й день моей серии под названием 30 дней обучения. Цель этих ежедневных сообщений — помочь мне обдумать некоторые идеи по конкретной проблеме или технологии, которые меня интересовали. Учитывая, что я использую эту серию, чтобы учиться самому, а не просто учить, я приветствую любые отзывы или исправления.

Предлагайте тему для моего следующего поста в комментариях!