【问题标题】:Why and how do you use JShell?为什么以及如何使用 JShell?
【发布时间】:2017-10-27 18:38:45
【问题描述】:

我浏览了一些关于 JShell 的教程,但我仍然不明白最重要的部分:我为什么还要使用 JShell?

这里是甲骨文所说的:

"您可以测试单个语句,尝试不同的变体 方法,并在 JShell 中尝试不熟悉的 API 会话”。

是的,很好,但是对于所有这些事情,我只能使用 IDE。我明白,REPL 应该使代码评估更快。但是,在 IDE 中使用 Sysout 在虚拟的 Hello World 项目中测试代码的 sn-p 肯定不会慢吗?

事实上,IDE 提供自动完成功能,及早检测错误,我可以通过单击鼠标检查方法/类的实现。这一切都应该让 IDE 中的代码测试比在 JShell 中更快?

我错过了什么? 有人可以给我几个用例,使用 JShell 比使用 IDE 更好吗? 你们是如何使用 JShell 的?

【问题讨论】:

  • 我认为这个问题不适合 SO,可能会因为过于宽泛而被关闭。不过,我没有投票赞成,因为我真的想知道你会做同样的事情。我总是至少打开六个 IDE 实例,一个专门用于玩弄东西。我认为使用 JShell 没有任何优势,但有很多缺点(没有构建工具支持以减少依赖项,没有简单的持久性,没有功能齐全的代码编辑器,更少的概述,缺乏对调试的支持......)。让我们看看其他人怎么说。
  • 对于过于宽泛的方面,我有点同意这可能会被关闭。但我什至不确定是什么带来了 IDE 和 REPL 之间的比较。在我个人看来,它们都应该用于不同的目的。 @Nicolai Plus 它让我免于使用比命令行实例消耗更多 CPU 的额外 IDE 实例;)

标签: java read-eval-print-loop java-9 jshell


【解决方案1】:

虽然我真的鼓励你继续阅读 The Java Shell 动机和目标。

但要稍微动手回答您的问题,实际上我很高兴知道您在 IDE 上尝试此操作时所花费的时间和您将遵循的程序。所以,只有很少的这些,你去吧:-

1.我最近了解到 Java 9 为集合引入了重载的便利工厂方法,然后对它们的作用以及如何使用它们感到好奇。

步骤

-> 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 到字符串(它们的颜色),然后在后期添加一些水果,并省略那些我不确定的颜色关于。然后最后得到所有红色水果的列表。当然,由于这些天我正在学习 Java 9,我会尝试使用与 Java9 中一样多的 API。

虽然您会尝试在您的 IDE 中添加所有这些 (^^) 代码,但您自己会注意到您最终将花费时间来实现 Immutable Map Static Factory Methods.

的所有这些特征>

PS

  • Robert 拥有presented Jshell here,这是 JShell 如何发挥作用的详细视图。

  • 在执行上述所有操作时,请记住,Jshell 的目标不是成为 IDE。

  • 所有这些,一般来说,通过绕过“代码 -> 编译 -> 执行”循环的编译阶段,对一种语言进行简单的实验。

【讨论】:

  • 非常感谢您提供非常详细的答案!我会检查你提供的链接。而且我确实在 JShell 和 IDE 中都尝试了您的代码 sn-ps。对我来说大约花了。两种情况下的时间相同。 JShell 的节省时间是:自动将所有内容保存在临时变量中,无需键入“;”,无需手动编译和运行。 IDE 节省时间:非常强大的自动完成功能和更轻松的代码导航和编辑。在 JShell 和 IDE 中,我都可以快速轻松地访问文档。 PS 我明白,JShell 不能替代 IDE。
  • 老实说,这并没有真正让我相信这样的解释器比 IDE 有很大的优势。通过按键触发完成并不是什么新鲜事,实际上,IDE 在这方面提供了更强大的工具,仅仅是因为它有一个专门用于这些任务的 UI,而不是停留在命令行控制台概念上。一旦您决定保留实验代码以供进一步使用,IDE 的另一个优势就会显现出来,因为您可以使用一个快捷键进行简单保存,而无需从文本中删除 REPL 工件,因为代码和输出已经分开。
  • @Holger 好吧,我并不打算描述 IDE 与 REPL 的比较。正如其中一个 cmets 所述,我什至不确定是什么导致了 IDE 和 REPL 之间的比较。在我看来,两者的目的是不同的,因此它们的使用应该基于意见。在jshell上保存实验代码/save可以用来保存实验的sn-ps
猜你喜欢
  • 1970-01-01
  • 2010-10-17
  • 2012-03-06
  • 2018-03-12
  • 2011-01-22
  • 2013-06-13
  • 2021-01-24
  • 2013-01-05
相关资源
最近更新 更多