Статьи

Ранний доступ к Java 9: ​​практическая сессия с JShell — Java REPL

Как начать пользоваться одной из самых классных функций Java 9, начиная с сегодняшнего дня?

В прошлые выходные я наконец-то нашел время для того, чтобы испачкать руки в версии Java 9 с ранним доступом. Первой остановкой была JShell, которая также называется Project Kulla; причина, которая заставила меня набраться смелости, чтобы в первую очередь попробовать версию Java с ранним доступом.

Это правильно. Официальная дата выпуска Java 9 в настоящее время назначена на сентябрь 2016 года, но ранняя версия доступа уже имеет полнофункциональную версию JShell. Он все еще находится в стадии разработки и имеет несколько причуд, но это никогда не останавливало нас раньше.

Интересный факт # 1: Project Kulla — это внутреннее название команды, разрабатывающей JShell. Кулла — это имя бога строителя из месопотамской мифологии, который был изгнан после завершения строительных работ. Намекать на использование Kulla в качестве инструмента обучения?

Так что же это за штука JShell?

JShell / Project Kulla — это первый официальный Java REPL (Read-Eval-Print-Loop), инструмент командной строки, который позволяет вам запускать операторы Java самостоятельно, без необходимости заключать их в классы или методы. В некотором роде похож на интерпретатор Python или на другие языки JVM, которые изначально поддерживают REPL, такие как Scala и Groovy. Среди будущих функций Java 9 это определенно одна из наиболее интересных. Чтобы ознакомиться с более интересными функциями (помимо Project Jigsaw!), Которые появятся в ближайшем к вам JDK, вы можете прочитать предыдущий наш пост о пяти лучших функциях Java 9, которые изменят ваш код . До сих пор, если вы хотите REPL в Java, вы могли бы использовать альтернативы, такие как repl.it с поддержкой нескольких языков или неофициальный проект Java REPL . Вместе с Java 9 REPL включается прямо в JDK вместе с пакетом langtools.

Интересный факт # 2: Еще один проект OpenJDK с мифологическим названием — проект Valhalla; нацеленность на Java 9 и работа над такими функциями, как типы значений и расширенные обобщения. Определенно задира.

Но хватит, давайте запустим его и посмотрим, что он может сделать. В следующем коротком перекодировании терминала мы проведем быстрый тестовый запуск с JShell v0.61 (существует известная проблема с OSX 10.10.3, когда приглашение смешивается с некоторыми результатами, поэтому, пожалуйста, не обращайте на это внимания, скорее всего скоро исправят)

Разжигать и играть с JShell

Обзор того, что мы только что увидели: некоторые из самых интересных функций JShell

** [8/7/2015] Обновление: отредактировано с примечаниями Брайана Гетца , архитектора языка Java в Oracle

1. Точка с запятой необязательна для простых выражений

Привет, JShell! Благодаря быстрой и гибкой природе REPL мы можем немного расслабиться и забыть о добавлении точек с запятой в конце наших утверждений:

Нет, здесь нет точки с запятой

Нет, здесь нет точки с запятой

На самом деле это был популярный ответ на опрос, который мы провели по поводу будущих функций Java. Конечно, точка с запятой здесь, чтобы остаться, или как терминаторы или разделители. REPL позволяет вводить пустые выражения и операторы по одному, поэтому точки с запятой становятся необязательными для случая использования терминатора в Jshell.

2. REPL сеть

С JShell мы не ограничены нашей машиной и имеем сетевой доступ, это открывает некоторые интересные возможности. Например, подумайте об использовании его в качестве терминала для связи с вашим сервером, удаленного подключения к нему и управления некоторыми параметрами извне. Другим вариантом будет запрос вашей базы данных, и возможности здесь действительно безграничны.

Простой пример, показывающий получение HTTP-заголовка с помощью JShell

Простой пример, показывающий получение HTTP-заголовка с помощью JShell

3. Помогите! Сохранение и загрузка рабочих мест

Помимо запуска и оценки операторов Java, JShell поддерживает ряд команд, которые помогут вам передвигаться и перемещаться по среде REPL. Вы можете сохранить и загрузить рабочие пространства (что делает Java похожим на язык сценариев), а затем вернуться в командную строку после того, как весь код был выполнен (именно здесь вы можете увидеть ошибку OS X, о которой я упоминал в записи терминала) ,

Другие полезные команды перечисляют все текущие доступные переменные и методы, просматривают всю историю ваших команд и перечисляют весь код, который вы написали до сих пор (который иногда все еще ведет себя немного странно).

Вот полный список доступных на данный момент команд:

JShell / помощь

JShell / помощь

4. Нет проверенных исключений

Если вы беспокоитесь о проверенных исключениях, разрушающих ваш опыт REPL — не бойтесь больше, JShell переносит их в фоновый режим. В следующем примере то, что заставило бы нас поймать IOException, уходит незамеченным. Здесь мы читаем и распечатываем файл без обработки IOExceptions:

jshell проверено

Один из случаев, когда мы видели всплывающее окно с проверенными исключениями, — это когда мы пытались запустить поток и использовали в нем Thread.sleep (). Поскольку это целый метод, а не один простой оператор, он должен быть полностью допустимым Java:

jshell-прерываться

Перейдем к еще нескольким функциям, которые не попали в запись терминала:

5. Java-выражения

Еще одна вещь, связанная с терминалом JShell, заключается в том, что он также может оценивать выражения Java при включении. Конкатенация строк, вызовы методов, арифметика, что угодно. В основном все, что вы могли бы обернуть внутри System.out.println (/ * выражение здесь * /). Как вы, возможно, уже заметили в других оценках, он немедленно помещает результат в собственную переменную и выводит его:

jshell арифметику

6. Прямая ссылка

JShell имеет довольно изящную поддержку прямых ссылок, поэтому вы можете определять функции, которые ссылаются на другие методы или переменные, которые будут определены позже. Вот пример из учебника по REPL от AdoptOpenJDK:

jshell вперед-исх

7. JShell API

Помимо использования в качестве автономного инструмента JDK, JShell также предоставит API, который открывает все его функциональные возможности для внешнего использования. Это означает, что внешние инструменты могут подключаться и использовать возможности JShell, и внезапно открываются некоторые интересные возможности, такие как включение их в состав IDE, таких как Eclipse, IntelliJ или Netbeans. Более креативные варианты использования API могут включать инструменты, позволяющие расширить возможности статического анализа, автоматизировать тестирование или даже подключиться к действующим JVM.

8. Изменение определений на ходу

Вы можете повторно объявить переменные, методы и классы, не беспокоясь об исходных объявлениях. Как только вы это сделаете, вам будет выдано сообщение с сообщением о том, что произошло, но кроме этого — это обычный бизнес.

Бонус: все, что вам нужно, это любовь

Если вы покопаетесь в папке / repl / samples , вы найдете этот симпатичный пример, который привлечет вас 3 маленьких сердца с помощью Swing:

Java <3 REPL

Ява

Как начать самостоятельно?

Чтобы начать, ознакомьтесь с инструкциями по принятию OpenJDK: Getting Started Kit от Лондонского сообщества Java (LJC). Вот краткое изложение шагов, которые помогут вам начать, особенно если вы никогда раньше не играли с ранними версиями JDK:

  1. Установите Java 9 раннего доступа JDK
  2. Постройте ветку Кулла-Дев:
    1
    2
    3
    4
    5
    hg clone http://hg.openjdk.java.net/kulla/dev kulla-dev
    cd kulla-dev
    bash configure –with-boot-jdk=/path/to/jdk1.8.0
    make clean images
    make install <=== optional
  3. Построить ответ:
    1
    2
    cd langtools/repl
    bash ./scripts/compile.sh
  4. И… теперь ты готов к бегу.
    1
    bash ./scripts/run.sh

Важное примечание для пользователей OS X: Перед запуском compile.sh & run.sh отредактируйте сценарии и измените #! / Usr / bin / sh на #! / Bin / sh .

Если у вас есть какие-либо вопросы о процессе, пожалуйста, оставьте их в разделе комментариев ниже, и мы сделаем все возможное, чтобы помочь.

Вывод

Интересно видеть, как Project Kulla приближается к зрелости, где у него будет полный функциональный статус. JShell имеет широкий спектр вариантов использования, но, в первую очередь, он поможет новым и существующим разработчикам быстро проверить свои новые навыки. Будь то базовая Java или какая-то новая библиотека, вы только начинаете думать об этом. Более того, JShell ставит Java в один ряд с языками, которые уже давно обладают этими возможностями, и, возможно, даже расширяет возможности конвертирования благодаря официальному API и удобному интерфейсу командной строки.