前言
工作中经常遇到需要写一小段代码做一些想法的快速验证,或者API的简单验证,比如文本的处理,简单的json数据的统计或分析。刚开始遇到这种场景,总是在IDE里新建一个测试项目,或者一个测试文件来完成这个工作,但是这样存在一些弊端:操作繁琐,只是简单快速验证的话,没必要用IDE这么重的工具;
效率低,只能不断地通过调试或打印来跟踪代码的执行情况;
这时候就是交互式编程工具的用武之地了。交互式编程工具又称Read-Evaluate-Print Loop,简称REPL,能够立即得到执行结果,并进行下一步的操作。本文总结一下尝试过的几种语言的交互式编程工具。
Jshell
因为对Java比较熟悉,自然首先想到的就是Java版的交互式编程工具 -- Jshell。Jshell是从JDK9开始支持的,可以执行单个语句,也可以导入已有的java文件。安装高于JDK9的版本之后,可直接在命令行中执行jshell来启动, 如需使用第三方包,需要在命令后添加classpath或moudlepath。
~/code/github jshell
| Welcome to JShell -- Version 11
| For an introduction type: /help intro
jshell>
常用命令
jshell提供了一些命令来辅助查看已定义的变量和方法。/vars 查看变量
/list 列出执行过的代码片段
/open 导入代码片段
/help 详细的帮助
/ 可列出所有命令, 其实只需要记住这一个就足够了
jshell> /list
1 : var a = "test for jshell";
3 : print(a)
4 : a
5 : void print(String s){
System.out.println(s);
}
6 : print(a)
jshell> /methods
| void print(String)
jshell> /vars
| String a = "test for jshell"
jshell>
代码片段的执行
然后就可以执行一些代码片段了,执行结果会直接打印出来,如果未定义变量,会生成一个变量名,比如下例中的$11:
jshell> print(a)
test for jshell
jshell> a.split(" ")
$11 ==> String[3] { "test", "for", "jshell" }
jshell> $11
$11 ==> String[3] { "test", "for", "jshell" }
jshell>
优缺点
优点可快速验证Java API
缺点shell下的自动补全和联想机制无法与IDE相媲美
对JDK外第三方包的依赖,需要添加classpath或moudlepath,略显繁琐
Java自身的强类型限制,使得代码没那么简练