Java 8 Nashorn JavaScript

Java 8 新特性Nuevas características de Java 8


Nashorn es un motor de JavaScript.

El motor Nashorn JavaScript ya no está disponible en Java 15.

Esto ya se ha marcado en Java 11 como:

@deprecated (forRemoval = true)

Desde JDK 1.8, Nashorn reemplaza a Rhino (JDK 1.6, JDK 1.7) como el motor de JavaScript integrado de Java. Nashorn es totalmente compatible con la especificación ECMAScript 5.1 y algunas extensiones. Utiliza nuevas características de lenguaje basadas en JSR 292, incluido invokedynamic introducido en JDK 7, para compilar JavaScript en bytecode de Java.

En comparación con la implementación anterior de Rhino, esto aporta una mejora de rendimiento de 2 a 10 veces.


jjs

jjs es una herramienta de línea de comandos basada en el motor Nashorn. Acepta código fuente de JavaScript como argumentos y ejecuta ese código fuente.

Por ejemplo, creamos un archivo sample.js con el siguiente contenido:

print('Hello World!');

Abre la consola y escribe el siguiente comando:

$ jjs sample.js

La salida del programa anterior es:

Hello World!

jjs programación interactiva

Abre la consola y escribe el siguiente comando:

$ jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>

Pasar parámetros

Abre la consola y escribe el siguiente comando:

$ jjs -- a b c
jjs> print('字母: ' +arguments.join(", "))
字母: a, b, c
jjs> 

Invocar JavaScript en Java

Usando ScriptEngineManager, el código JavaScript se puede ejecutar en Java. Ejemplo:

Archivo 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 = "Ejemplo"; Integer result = null; try { nashorn.eval("print('" + name + "')"); result = (Integer) nashorn.eval("10 + 2"); }catch(ScriptException e){ System.out.println("Error al ejecutar el script:"+ e.getMessage()); } System.out.println(result.toString()); } }

Al ejecutar el script anterior, el resultado es:

$ javac Java8Tester.java 
$ java Java8Tester
Ejemplo
12


Invocar Java en JavaScript

El siguiente ejemplo demuestra cómo hacer referencia a clases de Java en JavaScript:

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

Usamos el comando jjs para ejecutar el script anterior, y el resultado es el siguiente:

$ jjs sample.js
78952000000000002017.94

Java 8 新特性Nuevas características de Java 8

Otras extensiones