Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธาสร้าง JShell instance แบบโปรแกรมใน Java 9

JShell เป็นเครื่องมือโต้ตอบตั้งแต่ Java 9 เป็น REPL tool רשמיแรกของ Java สร้างสภาพแวดล้อมโปรแกรมมิ่งง่ายๆ ใน command line อ่าน input ผู้ใช้ ประเมินค่า และพิมพ์ผลลัพธ์

สามารถสร้าง JShell instance ใหม่แบบโปรแกรม ได้ในภาษา Java JShell และ API ที่เกี่ยวข้องอยู่ใน package jdk.jshell ได้ instance ใหม่ด้วย static method create() ของคลาส JShell เมธอด eval() ของคลาส JShell ใช้เพิ่มนิพจน์เข้า JShell instance คืน list ของ events ที่ triggered โดยการประเมินค่า เป็น snippet เดียวอย่าง expression statement method class variable declaration หรือ import statement แต่ละ SnippetEvent จาก eval() ตรวจสอบ output ของ expression ด้วย SnippetEvent.value()

ตัวอย่าง: สร้าง JShell Instance แบบโปรแกรม

import java.util.List;
import jdk.jshell.*;

public class JShellTest {
    public static void main(String args[]) {
        JShell jshell = JShell.create();
        List<SnippetEvent> list = jshell.eval("int x = 7+3*4;");
        System.out.println("Size of list: " + list.size());
        System.out.println("Value of the expression is : " + list.get(0).value());
    }
}

ผลลัพธ์

Size of snippetEventList : 1
Value of the expression is : 19

API สำคัญใน jdk.jshell

ตัวอย่างเพิ่มเติม: ประเมินหลาย snippets

JShell jshell = JShell.create();

// ประเมินหลาย statements
List<SnippetEvent> events = jshell.eval("int a = 10; int b = 20; int sum = a + b;");

// ดู events
events.forEach(e -> System.out.println(e.snippet() + " -> " + e.value()));

// ข้อผิดพลาด
List<SnippetEvent> errEvents = jshell.eval("int x = y;"); // y ไม่ได้ประกาศ
errEvents.forEach(e -> e.diagnostics().forEach(d -> System.err.println(d)));

JShell API เหมาะสำหรับสร้าง tools เช่น REPL ใน IDE, code evaluation engines, educational tools

Class/Interfaceคำอธิบาย
JShellEntry point สร้าง instance ด้วย create()
SnippetEventEvent จากการ eval() มี kind, snippet, value()
Snippetแทน code snippet (expression, statement, declaration)
SourceCodeAnalysisวิเคราะห์ source code (completion, documentation)
DiagDiagnostic (error, warning) จากการคอมไพล์