1. 序章

この記事は、次のJava9リリース用に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()

ここでは、ユビキタスな「HelloWorld」メソッドを定義しました。 通常の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. 結論

この記事では、Java9REPLについて説明しました。 Javaはすでに20年以上前から存在しているので、おそらく少し遅れて到着しました。 ただし、これはJavaツールボックスのもう1つの貴重なツールであることが証明されるはずです。