Java 8 trae consigo una nueva versión del motor de JavaScript llamada Nashorn, este motor introduce mejoras de rendimiento y compatibilidad con las nuevas características del lenguaje.
A continuación vamos a ver un ejemplo de cómo usar librerías escritas en JavaScript desde Java para evaluar expresiones matemáticas.
Necesitamos:
Paso 1. El Proyecto
Crea un nuevo proyecto Java Application que se llamara «JavaMathJS» y crea los paquetes necesarios, crea también una clase Main. Descarga la librería «math.min.js» y añade al paquete donde esta la clase main como se ve en la siguiente imagen.
Paso 2. El Código
Abre la clase Main y añade los siguientes import
import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException;
Creamos una instancia al manejador de Script de Java
ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("nashorn");
Cargamos la librería JavaScript que en est ejemplo estara en el mismo paquete que nuestra clase java
InputStream inputStream = Main.class.getClass().getResourceAsStream("/net/jc_mouse/math/math.min.js"); Reader reader = new InputStreamReader(inputStream, "utf-8"); engine.eval(reader);
Podemos, claro esta cargar el archivo JS desde otra ubicación en el disco, incluso desde Internet
Finalmente si queremos hacer uso de funciones propias de la librería «math.min.js«, hacemos lo siguiente:
//se evalua en javascript la expresion matematica engine.eval("var value = math.atan2(3, -3) / math.pi; "); //recupera el valor de la variable evaluada Object object = engine.get("value"); //imprime en consola System.out.println("Expresion matematica"); System.out.println("math.atan2(3, -3) / math.pi es igual a: " + object);//0.75
A continuación la clase final más unos ejemplos :
import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /** * @see https://www.jc-mouse.net/ * @author Mouse */ public class Main { public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("nashorn"); try{ //se carga archivo JS en memoria InputStream inputStream = Main.class.getClass().getResourceAsStream("/net/jc_mouse/math/math.min.js"); Reader reader = new InputStreamReader(inputStream, "utf-8"); engine.eval(reader); /*------ Ejemplo 1 ------*/ //se evalua en javascript la expresion matematica engine.eval("var value = math.atan2(3, -3) / math.pi; "); //recupera el valor de la variable evaluada Object object = engine.get("value"); //imprime en consola System.out.println("Expresion matematica"); System.out.println("math.atan2(3, -3) / math.pi es igual a: " + object);//0.75 /*------ Ejemplo 2 ------*/ //Operaciones encadenadas engine.eval("var value = math.chain(3)\n" + " .add(4)\n" + " .multiply(2)\n" + " .done(); "); object = engine.get("value"); System.out.println("Operaciones encadenadas"); System.out.println("math.chain(3).add(4)..multiply(2).done() es igual a " + object);//14 /*------ Ejemplo 3 ------*/ //evaluar expresiones matematicas engine.eval("var value = math.eval('sqrt(3^2 + 4^2)'); "); object = engine.get("value"); System.out.println("Evaluar expresiones matematicas"); System.out.println("sqrt(3^2 + 4^2) = " + object);// 5 /*------ Ejemplo 4 ------*/ //definir funciones engine.eval("var f = math.eval('f(x) = x ^ a', {a:3});"); engine.eval("var value = f(2);"); object = engine.get("value"); System.out.println("Definir funciones"); System.out.println("f(x)=x^a donde a=3 es igual " + object);// 8 }catch (ScriptException ex) { System.err.println(ex.getMessage()); } catch (UnsupportedEncodingException ex) { System.err.println(ex.getMessage()); } } }
Ejecutando tenemos:
Eso es todo 🙂
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
Los objetos como JLabel o JButton nos permiten hacer uso de código CSS en su propiedad TEXT, asi podemos adornar el text...
Blockly proyecto de Google for Education, es una biblioteca en JavaScript que agrega un editor de código visual a aplica...
Python es un lenguaje de programación interpretado, de programación multiparadigma, ya que soporta orientación a objeto...
La Asamblea General de la Organización de las Naciones Unidas (ONU) en uno de esos extraños momentos de lucidez aprobó u...
Java Help es (o era) una librería para java que permitía añadir ventanas de ayuda HTML a nuestros proyectos, al ser una...
Espresso es un framework de testing propiedad de Google que está dirigido a desarrolladores que creen que las pruebas au...
Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...