Calms blog

CALMSブログ

Javaプログラマ必須 - 対話型にJavaを実行できる「Java REPL」

 スクリプト言語の経験がある人がJavaに対してよく思うこと。それは・・・

 コンパイルが面倒くさい!

 ちょっと構文やAPIの確認をしたいだけなのにいちいちコンパイルするのは確かに面倒です。

 特に、Javaの新バージョンで新しい文法、クラスが出来た時なんかは。

 そしてこう思うはず・・・

「あぁ、Javaにも対話型のコンソール・・・REPLみたいなものがあればなぁ」

 それ、あります。

その名もズバリ Java REPL

Java REPL

 このJava REPLは、まさにJavaを対話的に実行するためのOSSです。

 上記のページでは実際に挙動を試すことが出来ます。

 ダウンロードは以下のページで、Downloadsのlatest versionからjarファイルが1個だけ落とせます。

https://github.com/albertlatacz/java-repl

 落とした後は、以下のコマンドで起動するだけ

java -jar javarepl.jar
Welcome to JavaREPL version 261 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0)
Type expression to evaluate, :help for more options or press tab to auto-complete.
java> 
java> 

 起動すると、あとは普通にコードを書いていくだけです。

 1文なら末尾のセミコロンはいりません。

java> System.out.println("Hello, Java REPL!")
Hello, Java REPL!

 importも普通に使えます。

java> import javax.swing.JOptionPane
Imported javax.swing.JOptionPane

java> JOptionPane.showMessageDialog(null, "Message!")

f:id:calms:20140320214300p:plain

Classpathを追加する時は:cpを使用

// カレントディレクトリを追加。jarを追加したいならjarのパス
java> :cp .
Added . to classpath.

 Tabキーで入力候補を表示できます。

java> import java.nio.file.Files
Imported java.nio.file.Files

java> Files.is
isDirectory(      isHidden(         isSameFile(       isSymbolicLink(   
isRegularFile(    isExecutable(     isReadable(       isWritable(      

 Java8のJDKを使えば、もちろんJava8の構文も使えます。

 この辺りは今のところGroovyとかじゃ代替できないところ。

java> List<String> list = Arrays.asList("A", "B", "C")
java.util.List<java.lang.String> list = [A, B, C]

java> list.forEach(System.out::println)
A
B
C
java> Function<String, String> f = s -> s + s
java.util.function.Function<java.lang.String, java.lang.String> f = Evaluation$qkt85oj6ewvybm27fc0n$$Lambda$1/97084211@38123d96

java> f.apply("Hello! ")
java.lang.String res1 = "Hello! Hello! "

 その他、クラス定義、メソッド定義なんかも普通に出来ます。

 終了は:quitです。

java> :quit

Terminating...

 その他のコマンドは:helpで参照出来ます。

 Windowsであれば起動コマンドを環境変数入れておけば簡単に起動出来るようになります。JAVA_REPLで登録すれば%JAVA_REPL%でそのまま呼び出せますね。

 Macであれば実行可能ファイルにコマンドを書いて保存してパスを通せばそれで終わりです。

 手元で試したところ、上キーを押した時にWindowsはコマンド履歴がうまく出ず。(Mac, UbuntuはOK)

 なので、コマンド履歴の操作については環境差が考えられますのでご注意を。

 Javaプログラマ必携です。


関連エントリ:

 5分で理解できぬ! Java8 ラムダ式 まとめ - Calms blog