Java 8 Nashorn JavaScript
Nashorn は JavaScript エンジンです。
Nashorn JavaScript Engine は Java 15 では利用できません。
これは Java 11 では既に次のようにマークされています:
@deprecated (forRemoval = true)
JDK 1.8 から、Nashorn は Rhino(JDK 1.6、JDK 1.7) に取って代わり、Java の組み込み JavaScript エンジンになりました。Nashorn は ECMAScript 5.1 仕様といくつかの拡張を完全にサポートしています。JSR 292 に基づく新しい言語機能(JDK 7 で導入された invokedynamic を含む)を使用して、JavaScript を Java バイトコードにコンパイルします。
以前の Rhino 実装と比較して、これにより 2 倍から 10 倍のパフォーマンス向上が実現しました。
jjs
jjs は Nashorn エンジンに基づくコマンドラインツールです。JavaScript ソースコードを引数として受け取り、それらのソースコードを実行します。
例えば、以下の内容を持つ sample.js ファイルを作成します:
print('Hello World!');
コンソールを開き、次のコマンドを入力します:
$ jjs sample.js
上記のプログラムの出力結果は次のとおりです:
Hello World!
jjs 対話型プログラミング
コンソールを開き、次のコマンドを入力します:
$ jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>
引数の受け渡し
コンソールを開き、次のコマンドを入力します:
$ jjs -- a b c
jjs> print('字母: ' +arguments.join(", "))
字母: a, b, c
jjs>
Java から JavaScript を呼び出す
ScriptEngineManager を使用すると、Java 内で JavaScript コードを実行できます。例は次のとおりです:
Java8Tester.java ファイル
上記のスクリプトを実行すると、出力結果は次のとおりです:
$ javac Java8Tester.java $ java Java8Tester サンプル 12
JavaScript から Java を呼び出す
次の例は、JavaScript で Java クラスを参照する方法を示しています:
var BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
var result = new BigDecimal(amount).multiply(
new BigDecimal(percentage)).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
return result.toPlainString();
}
var result = calculate(568000000000000000023,13.9);
print(result);
jjs コマンドで上記のスクリプトを実行すると、出力結果は次のとおりです:
$ jjs sample.js 78952000000000002017.94
その他の拡張
Java 8 の新機能