1前書き

この記事は、今後のJava 9リリースのJDKにバンドルされている対話式の

REPL

(Read-Evaluate-Print-Loop)コンソールである

jshell

についての記事です。概念に慣れていない人のために、REPLは対話的にコードの任意の断片を実行しそれらの結果を評価することを可能にします。

REPLは、アイデアの実行可能性をすばやく確認したり、たとえば

String

または

SimpleDateFormat

のフォーマットされた文字列


2ランニング

始めるためには、REPLを実行する必要があります。

$JAVA__HOME/bin/jshell

シェルからのより詳細なメッセージングが必要な場合は、

-v

フラグを使用できます。

$JAVA__HOME/bin/jshell -v

準備ができたら、わかりやすいメッセージとよく知られているUnixスタイルのプロンプトが下部に表示されます。


3メソッドの定義と呼び出し

シグネチャとボディを入力することでメソッドを追加できます。

jshell> void helloWorld() { System.out.println("Hello world");}
|  created method helloWorld()

ここでは、偏在する「hello world」方式を定義しました。通常のJava構文を使って呼び出すことができます。

jshell> helloWorld()
Hello world


4変数

変数は、通常のJava宣言構文で定義できます。

jshell> int i = 0;
i ==> 0
|  created variable i : int

jshell> String company = "Baeldung"
company ==> "Baeldung"
|  created variable company : String

jshell> Date date = new Date()
date ==> Sun Feb 26 06:30:16 EST 2017
|  created variable date : Date

セミコロンはオプションです。初期化せずに変数を宣言することもできます。

jshell> File file
file ==> null
|  created variable file : File


5式

任意の有効なJava式が受け入れられ、評価の結果が表示されます。結果の明示的な受け取り側が提供されていない場合は、「スクラッチ」変数が作成されます。

jshell> String.format("%d of bottles of beer", 100)
$6 ==> "100 of bottles of beer"
|  created scratch variable $6 : String

REPLは、$ 6という名前のスクラッチ変数を作成したことを示しています。この変数の値は「100個のビール瓶」で、タイプは

String

です。

複数行の表現も可能です。 **

Jshell

は式が不完全であることを知るのに十分賢く、ユーザーに新しい行を続けるよう促します。

jshell> int i =
   ...> 5;
i ==> 5
|  modified variable i : int
|    update overwrote variable i : int

式の継続を示すためにプロンプ​​トがインデントされた

…​>

に変更されたことに注意してください。


6. コマンド

Jshellには、Javaステートメントの評価に関連しない、かなりの数のメタコマンドが用意されています。通常の操作と区別するために、すべてスラッシュ(/)で始まります。たとえば、

/help

や/?を発行して、使用可能なすべてのコマンドのリストを要求できます。

それらのいくつかを見てみましょう。


6.1. 輸入品

現在のセッションでアクティブなすべてのインポートを一覧表示するには、

/import

コマンドを使用します。

jshell>/import
|    import java.io.**
|    import java.math.**
|    import java.net.**
|    import java.nio.file.**
|    import java.util.**
|    import java.util.concurrent.**
|    import java.util.function.**
|    import java.util.prefs.**
|    import java.util.regex.**
|    import java.util.stream.**

ご覧のとおり、シェルはかなりの数の便利なインポートが既に追加されたものから始まります。


6.2. リスト

REPLでの作業は、フル機能のIDEをすぐに使えるほど簡単ではありません。どの変数にどの値があり、どのメソッドが定義されているかなどを忘れがちです。シェルの状態を確認するには、

/var



/methods



/list

、または__/historyを使用できます。

jshell>/var
| int i = 0
| String company = "Baeldung"
| Date date = Sun Feb 26 06:30:16 EST 2017
| File file = null
| String $6 = "100 of bottles of beer on the wall"

jshell>/methods
| void helloWorld()

jshell>/list

 1 : void helloWorld() { System.out.println("Hello world");}
 2 : int i = 0;
 3 : String company = "Baeldung";
 4 : Date date = new Date();
 5 : File file;
 6 : String.format("%d of bottles of beer on the wall", 100)

jshell>/history

void helloWorld() { System.out.println("Hello world");}
int i = 0;
String company = "Baeldung"
Date date = new Date()
File file
String.format("%d of bottles of beer on the wall", 100)/var/methods/list/history


/list



/history

の違いは、後者が式に加えてコマンドを表示することです。


6.3. 保存中

式の履歴を保存するには、

/save

コマンドを使用できます。

jshell>/save repl.java

これにより、

jshell

コマンドを実行したのと同じディレクトリの

repl.java

に式の履歴が保存されます。


6.4. ロード中

以前に保存したファイルを読み込むには、

/open

コマンドを使います。

jshell>/open repl.java

ロードされたセッションは、

/var



/method

、または

/list

を発行して検証できます。


6.5. 終了中

作業が終了したら、

/exit

コマンドでシェルを終了できます。

jshell>/exit
|  Goodbye

さようなら

jshell


7. 結論

この記事では、Java 9 REPLを見ました。 Javaはすでに20年以上前から使われているので、おそらくそれは少し遅れて届きました。

しかし、それは私たちのJavaツールボックスにおけるもう一つの価値あるツールであることを証明するべきです。