Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9のJShell(REPL)における7つのステータス状態とは?

REPLは「Read-Evaluate-Print-Loop(読み込み・評価・出力・ループ)」の略称で、対話形式でコードを実行できる環境を指します。JShellでは、入力された各ステートメント(スニペット)がそれぞれ独自の状態を持っており、この状態からスニペットや変数の実行ステータスを判別できます。具体的には、コードを評価するJShellインスタンスのeval()メソッドの戻り値を通じて、その状態を確認することが可能です。

Java 9のJShellには、以下の7種類のステータス状態が定義されています。

  • DROPPED:スニペットが非アクティブな状態です。/dropコマンドなどで削除された場合に該当します。
  • NONEXISTENT:スニペットがまだ存在しないため、非アクティブな状態です。
  • OVERWRITTEN:新しいスニペットによって置き換えられたため、非アクティブな状態です。
  • RECOVERABLE_DEFINED:宣言スニペットであり、本体に未解決の参照やその他の問題がありますが、後続の操作で回復可能な状態です。
  • RECOVERABLE_NOT_DEFINED:宣言スニペットであり、未解決の参照などの問題を抱えていますが、回復可能な状態です。ただし既存のコードからは参照できません。
  • REJECTED:初回評価時にコンパイルに失敗し、JShellの状態を変更しても有効にできないため、非アクティブな状態です。
  • VALID:スニペットが有効であり、正常に実行できる状態です。

実装例

以下は、eval()メソッドで複数のステートメントを評価し、status()メソッドでスニペットの状態を取得するサンプルコードです。

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

public class JShellTest {
    public static void main(String args[]) {
        JShell shell = JShell.create();
        List<SnippetEvent> events = shell.eval("int a, b, sum; " + "a = 12; b = 11; sum = a + b; " +
                "System.out.println(sum);");
        for(SnippetEvent event : events) {
            Snippet snippet = event.snippet();
            Snippet.Status snippetstatus = shell.status(snippet);
            if(snippetstatus == Status.VALID) {
                System.out.println("正常に実行されました");
            }
        }
    }
}

実行結果

正常に実行されました
正常に実行されました
正常に実行されました

この例では、変数宣言と代入の各ステートメントがすべてStatus.VALIDと判定され、正常に実行されたことが確認できます。このようにSnippet.Statusを活用することで、JShell上のコードの状態をプログラム的に把握し、動的なコード評価ツールや学習用アプリケーションの構築に役立てることができます。

  1. Java 9 JShellの起動スクリプト(DEFAULT・JAVASE・PRINTING)の違いと使い方

    JShellは、Java 9で導入された対話型のJavaシェルツールです。コマンドラインプロンプトから起動でき、入力したコードをその場で評価して結果を即座に表示します。いわゆるREPL(Read-Evaluate-Print-Loop:読み込み→評価→表示→繰り返し)ツールとして動作するため、コード断片の動作確認やAPIの学習に非常に便利です。 起動スクリプトの指定方法(--startupフラグ) JShellでは、起動時にスクリプトを読み込むことで、あらかじめ定義済みのimport文や便利なメソッドを使える状態でセッションを開始できます。起動スクリプトを指定するには「--startup」フ

  2. Java 9のJShellで使える「/edit」コマンドの種類と使い方

    JShellは、Java 9で導入されたコマンドラインツールです。main()メソッドを用意しなくても、宣言・ステートメント・式をその場で評価できるのが大きな特徴です。さらに、JShellにはJShell Edit Padという簡易テキストエディタが組み込まれており、「/edit」コマンドで起動することで、入力済みのコードを手軽に編集できます。 /editコマンドの3つの形式 JShellで利用できる「/edit」コマンドには、次の3つの形式があります。 /edit /edit [ID] /edit [コード名] /edit:引数なしで実行すると、現在アクティブなすべてのコードがテキストエデ