読者です 読者をやめる 読者になる 読者になる

のんびりSEの議事録

プログラミング系のポストからアプリに関してのポストなどをしていきます。まれにアニメ・マンガなど

JShellを試してみた

最近、ちょっと今更ながら、Java 9からJavaでもLL言語には標準で付いていることが多い、RPELが搭載されるようになったことを知ったので、試してみました。

インストール

  • Mac OSXにインストール

下記からダウンロードし、インストールを行う

JDK 9 Early Access Releases — Project Kenai

コンソールで確認

$ export JAVA_HOME=`/usr/libexec/java_home -v 9`
$ $JAVA_HOME/bin/jshell
|  JShellへようこそ -- バージョン9-ea
|  概要については、次を入力してください: /help intro

jshell> /help
|  Java言語の式、文または宣言を入力します。
|  または、次のコマンドのいずれかを入力します:
|  /list [<name or id>|-all|-start]
|       入力したソースをリストします
|  /edit <name or id>
|       名前またはIDで参照されるソース・エントリを編集します
|  /drop <name or id>
|       名前またはIDで参照されるソース・エントリを削除します
|  /save [-all|-history|-start] <file>
|       ファイルにスニペット・ソースを保存します。
|  /open <file>
|       ソースの入力としてファイルを開きます
|  /vars [<name or id>|-all|-start]
|       宣言された変数およびその値をリストします
|  /methods [<name or id>|-all|-start]
|       宣言されたメソッドおよびその署名をリストします
|  /types [<name or id>|-all|-start]
|       宣言された型をリストします
|  /imports
|       インポートされたアイテムをリストします
|  /exit
|       exit jshell
|  /env [-class-path <path>] [-module-path <path>] [-add-modules <modules>] ...
|       view or change the evaluation context
|  /reset
|       reset jshell
|  /reload [-restore] [-quiet]
|       リセットして関連する履歴をリプレイします -- 現在または以前(-restore)
|  /history
|       入力した内容の履歴
|  /help [<command>|<subject>]
|       jshellに関する情報を取得します
|  /set editor|start|feedback|mode|prompt|truncation|format ...
|       jshell構成情報を設定します
|  /? [<command>|<subject>]
|       jshellに関する情報を取得します
|  /!
|       最後のスニペットを再実行します
|  /<id>
|       IDでスニペットを再実行します
|  /-<n>
|       n回前のスニペットを再実行します
|
|  詳細は、'/help'の後にコマンドまたはサブジェクトの名前を続けて入力してください。
|  たとえば、'/help /list'または'/help intro'などです。サブジェクト:
|  intro
|       jshellツールの概要
|  shortcuts
|       ショートカットの説明
|  context
|       the evaluation context options for /env /reload and /reset

jshell> System.out.println("Hello World")
Hello World

jshell> List<String> cities = new ArrayList<String>();
cities ==> []

jshell> cities.add("東京");
$3 ==> true

jshell> cities.add("大阪");
$4 ==> true

jshell> cities.add("名古屋");
$5 ==> true

jshell> cities
cities ==> [東京, 大阪, 名古屋]

jshell> cities.forEach((final String city) -> System.out.println(city));
東京
大阪
名古屋

jshell> cities.parallelStream().forEach(System.out::println);
大阪
名古屋
東京

思ってたよりはいい感じ! いちいちコンパイルをしなくても対話形式で返してくれるので、 ちょっとライブラリのサンプルを試したいときには良さそうです

参考

[Java9 新機能] jshell入門 - Qiita

JShell - Java 9 interpreter (REPL) - Getting Started and Examples

MacにJava9を入れてjshellを動かすまでのメモ - SHIBUYA 3%