Java8-nashorn-java-script

提供:Dev Guides
移動先:案内検索

Java 8-Nashorn JavaScript

Java 8では、既存のRhinoを置き換えるために、はるかに改善されたjavascriptエンジンであるNashornが導入されました。 Nashornは、メモリ内のコードを直接コンパイルし、バイトコードをJVMに渡すため、2〜10倍のパフォーマンスを提供します。 Nashornは、パフォーマンスを改善するためにJava 7で導入された呼び出しダイナミクス機能を使用しています。

jjs

Nashornエンジンの場合、JAVA 8では、コンソールでjavascriptコードを実行するための新しいコマンドラインツール jjs が導入されています。

jsファイルの解釈

ファイル sample.js を作成してc:\> JAVAフォルダーに保存します。

sample.js

print('Hello World!');

コンソールを開き、次のコマンドを使用します。

C:\JAVA>jjs sample.js

次のような出力が生成されます。

Hello World!

インタラクティブモードのjjs

コンソールを開き、次のコマンドを使用します。

C:\JAVA>jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>

引数を渡す

コンソールを開き、次のコマンドを使用します。

C:\JAVA> jjs -- a b c
jjs> print('letters: ' +arguments.join(", "))
letters: a, b, c
jjs>

JavaからJavaScriptを呼び出す

ScriptEngineManagerを使用すると、JavaでJavaScriptコードを呼び出して解釈できます。

C:\> JAVAなどで選択した任意のエディターを使用して、次のJavaプログラムを作成します。

Java8Tester.java

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;

public class Java8Tester {

   public static void main(String args[]) {
      ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
      ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");

      String name = "Mahesh";
      Integer result = null;

      try {
         nashorn.eval("print('" + name + "')");
         result = (Integer) nashorn.eval("10 + 2");

      } catch(ScriptException e) {
         System.out.println("Error executing script: "+ e.getMessage());
      }
      System.out.println(result.toString());
   }
}

結果を確認する

次のように javac コンパイラを使用してクラスをコンパイルします-

C:\JAVA>javac Java8Tester.java

次のようにJava8Testerを実行します-

C:\JAVA>java Java8Tester

それは次の結果を生成する必要があります-

Mahesh
12

JavaScriptからJavaを呼び出す

次の例は、JavaスクリプトでJavaクラスをインポートして使用する方法を説明しています。

c:\> JAVAフォルダーに sample.js を作成して保存します。

sample.js

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);

コンソールを開き、次のコマンドを使用します。

C:\JAVA>jjs sample.js

それは次の出力を生成する必要があります-

78952000000000000003.20