Java 9 – REPLの探究
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ツールボックスにおけるもう一つの価値あるツールであることを証明するべきです。