在编写自动化脚本过程中,调试脚本是一件麻烦的事,我们需要不断调整代码来验证想法,反复从头开始执行,这将耗费大量时间。交互式编程可以让这件事变得轻松简单
交互式编程是一种编程方法,它允许工程师与计算机进行实时的、逐行的交互,以开发、测试和执行代码,这种编程方式通常用于脚本语言以及快速原型开发中。以下是交互式编程的一些特点:
对新手而言,通过不断尝试不同的代码片段,可以快速掌握编程语言的基本语法。
monaco-editor
是微软开源的文本编辑器,也是 vscode 核心编辑器。yqhp web 代码编辑器基于此实现JShell
是 Java9 引入的编程工具,yqhp 交互式编程基于此实现以下通过一个示例,更直观地了解 JShell 核心执行流程
// 运行代码
class HelloWorld {
static void say() {
System.out.println("hello world");
}
}
// JShell生成的代码(简化版) -> 编译并加载到JVM
class $1 {
public static class HelloWorld {
static void say() {
System.out.println("hello world");
}
}
}
// 运行代码
boolean exists(By by) {
try {
driver.findElement(by);
return true;
} catch (Exception e) {
return false;
}
}
// JShell生成的代码(简化版) -> 编译并加载到JVM
import static $0.driver;
class $2 {
public static boolean exists(By by) {
try {
driver.findElement(by);
return true;
} catch (Exception e) {
return false;
}
}
}
// 运行代码
if (exists(By.id("android:id/button1"))) {
HelloWorld.say();
}
// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $1.HelloWorld;
import static $2.exists;
class $3 {
public static Object do_it$() throws Throwable {
if (exists(By.id("android:id/button1"))) {
HelloWorld.say();
}
return null;
}
}
// 运行代码
var logintBtn = driver.findElement(By.id("android:id/tv_login"));
// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $0.driver;
class $4 {
public static org.openqa.selenium.WebElement logintBtn;
public static Object do_it$() throws Throwable {
return logintBtn = driver.findElement(By.id("android:id/tv_login"));
}
}
// 运行代码
logintBtn.click()
// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $4.logintBtn;
class $5 {
public static Object do_it$() throws Throwable {
logintBtn.click();
return null;
}
}
// 运行代码
var text = logintBtn.getText();
// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $4.logintBtn;
class $6 {
public static String text;
public static Object do_it$() throws Throwable {
return text = logintBtn.getText();
}
}
开源地址: https://github.com/yqhp
文档地址: https://yqhp.github.io/docs/
如有帮助,github star 支持下吧:)