Почему и как вы используете JShell?

Я прошел пару туториалов по JShell и до сих пор не понимаю самой важной части: зачем мне вообще использовать JShell?

Вот что говорит Oracle:

«Вы можете протестировать отдельные операторы, опробовать различные варианты метода и поэкспериментировать с незнакомыми API в рамках сеанса JShell».

Да, здорово, но для всего этого я могу просто использовать IDE. Я понимаю, что REPL должен ускорить оценку кода. Однако тестирование фрагмента кода в IDE в фиктивном проекте Hello World с помощью Sysout точно не будет медленнее?

На самом деле IDE обеспечивают автозаполнение, обнаруживают ошибки на ранней стадии, и я могу проверить реализацию метода/класса одним щелчком мыши. Это все должно сделать тестирование кода в IDE быстрее, чем в JShell?

Что мне не хватает? Может ли кто-нибудь дать мне пару вариантов использования, где использование JShell лучше, чем использование IDE? Как вы, ребята, используете JShell?


person displayname    schedule 27.10.2017    source источник
comment
Я не думаю, что этот вопрос подходит для SO и может быть закрыт как слишком широкий. Однако я не голосовал за это, потому что на самом деле мне интересно то же, что и вам. У меня всегда открыто как минимум полдюжины экземпляров IDE, один специально для экспериментов. Я не вижу никаких преимуществ использования JShell по сравнению с этим, но есть множество недостатков (отсутствие поддержки инструмента сборки для удаления зависимостей, отсутствие простого сохранения, отсутствие полнофункционального редактора кода, меньший обзор, отсутствие поддержки отладки...). Посмотрим, что говорят другие люди.   -  person Nicolai Parlog    schedule 28.10.2017
comment
Что касается слишком широкого аспекта, я согласен, что это может быть закрыто в целом. Но я не уверен, что вообще приводит к сравнению между IDE и REPL. По моему личному мнению, они оба предназначены для разных целей. @Nicolai Кроме того, это избавляет меня от этого дополнительного экземпляра IDE, потребляющего намного больше ЦП, чем экземпляр командной строки;)   -  person Naman    schedule 28.10.2017


Ответы (1)


Хотя я настоятельно рекомендую вам прочитать оболочку Java о мотивах и целях.

Тем не менее, чтобы ответить на ваш вопрос с небольшим практическим опытом, и я действительно был бы рад узнать о времени, которое вы потратите, и о процедуре, которой вы будете следовать, пробуя это в среде IDE. Итак, с некоторыми из них, вот вам: -

1. Недавно я узнал, что в Java 9 появились перегруженные методы Convenience Factory для коллекций, и мне стало любопытно, что они делают и как их использовать.

Шаги

-> Type 'jshell' on command prompt (assuming JAVA_HOME is set to JDK9's bin)
-> Type 'List.o'
-> Press Tab (completes the `of`) 
-> Tab displays all signatures 
-> Tab starts reading the documentation from first

введите описание изображения здесь

2. Как насчет сохранения синтаксиса кода? Если бы вы заметили на приведенном выше изображении, инициализация List даже не удосужилась позаботиться о переменной для ее хранения, завершающей точке с запятой и т. д.

3. Как быстро вы сможете обнаружить исключения, вызванные некоторым фрагментом кода, который вы собираетесь реализовать? Итак, вариант использования здесь: я хочу создать Map из String (название фруктов) в String (их цвет), затем добавить к нему еще несколько фруктов на более позднем этапе и исключить те цвета, в которых я не уверен. Затем, наконец, получите список всех тех фруктов, которые являются красными. И, конечно же, поскольку я сейчас изучаю Java 9, я бы попытался использовать столько же API, сколько и в Java 9.

введите описание изображения здесь

И пока вы пытаетесь добавить весь этот (^^) код в свою IDE, вы сами можете заметить, сколько времени вам потребуется, чтобы реализовать все эти характеристики Статические фабричные методы неизменяемой карты.

ПС:

  • Роберт представил Jshell здесь, где подробно показано, как JShell может быть эффективным.

  • Делая все вышеперечисленное, имейте в виду, что целью Jshell не является быть IDE.

  • И все это, в общем-то, простое экспериментирование с языком в обход этапа компиляции цикла «код -> компилировать -> выполнить». read-eval -print-loop

person Naman    schedule 28.10.2017
comment
Большое спасибо за очень подробный ответ! Я проверю предоставленные вами ссылки. И я действительно опробовал ваши фрагменты кода как в JShell, так и в IDE. Для меня это заняло ок. одинаковое количество времени в обоих случаях. Использование JShell позволило сэкономить время: автоматическое сохранение всего во временной переменной, отсутствие необходимости набирать ';', отсутствие необходимости компилировать и запускать вручную. Экономия времени благодаря IDE: очень мощное автозаполнение и упрощенная навигация и редактирование кода. И в JShell, и в IDE у меня был быстрый и легкий доступ к документации. PS Я понимаю, что JShell не может заменить IDE. - person displayname; 28.10.2017
comment
Честно говоря, это не очень убедило меня в том, что такой интерпретатор имеет большое преимущество перед IDE. Завершение, запускаемое нажатием клавиши, не является чем-то новым, на самом деле IDE предлагает гораздо более мощные инструменты в этом отношении просто потому, что у нее есть пользовательский интерфейс, предназначенный для этих задач, а не концепция консоли командной строки. Еще одно преимущество IDE проявляется, как только вы решите сохранить код своего эксперимента для дальнейшего использования, так как вы можете просто сохранить его одним сочетанием клавиш и не нужно удалять артефакты REPL из текста, так как код и вывод уже готовы. разделены. - person Holger; 28.10.2017
comment
@Holger Ну, я не собирался сравнивать IDE и REPL. Как указано в одном из комментариев, я не уверен, что даже приводит к сравнению между IDE и REPL. Цели обоих, на мой взгляд, разные, и, следовательно, их использование должно основываться на мнении. С точки зрения сохранения экспериментального кода /save на jshell также можно использовать для сохранения экспериментальных фрагментов. - person Naman; 28.10.2017