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! :)
Uno de los mayores problemas que se presenta en el desarrollo de una aplicación, es el acceso a la base de datos y el mé...
Rompecabezas 3×3 realizado en Visual Basic .NET, lo que se hizo fue una migración de un proyecto hecho en java (pue...
Última parte del tutorial «Mapas interactivos HTML5», vamos uniendo todo todo el código. En la parte 5 de este tutorial,...
En este post vemos un ejemplo de como convertir un archivo de imagen en una cadena de texto codificado en Base64 aprovec...
En este post realizaremos una aplicación que pueda capturar nuestra voz y convertir en texto Pasar voz a texto con Andro...
XJC es una herramienta de linea de comandos del compilador de esquemas de JAXB que se puede utilizar para convertir un e...
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...