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 🙂
Para poder conectar PHP con una base de datos de microsoft Access debemos seguir los siguientes pasos: 1. Crea una base[...]
Como se vio en un post anterior (Capturar video de una webcam con JMF) la captura de un video desde una webcam utilizand[...]
Un Tabbed Activity te permite cambiar la vista entre fragmentos desplazando el dedo de izquierda a derecha o de derech[...]
Los comandos (Command) en Laravel son scripts PHP que se ejecutan a través de la interfaz de línea de comandos Artisan p[...]
Tenia un problema, me pasaron unos archivos excel con unos cientos de registros (ver imagen más abajo) que exportaron de[...]
Continuando la serie de tutoriales para la creación de instaladores para programas escritos en Java, en esta oportunidad[...]