Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Evaluar expresiones matemáticas en Java con JavaScript

Evaluar expresiones matemáticas en Java con JavaScript

Autor jc mouse miércoles, junio 22, 2016

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:

  • IDE Netbeans o Eclipse
  • Java 1.8
  • Liberia JavaScript MathJS descarga la versión que esta comprimido «math.min.js«
  • Conocimientos sobre Java y Javascript

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.

math expresion

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:

mhat java script

Eso es todo 🙂

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

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! :)

También Te Podría Interesar

Código CSS en Java/Netbeans

Código CSS en Java/Netbeans

Los objetos como JLabel o JButton nos permiten hacer uso de código CSS en su propiedad TEXT, asi podemos adornar el text...

Google Blockly: Lenguaje de Programación Visual por bloques

Google Blockly: Lenguaje de Programación Visual por bloques

Blockly proyecto de Google for Education, es una biblioteca en JavaScript que agrega un editor de código visual a aplica...

Introducción a Python en Java

Introducción a Python en Java

Python es un lenguaje de programación interpretado,  de programación multiparadigma, ya que soporta orientación a objeto...

Combatiendo la censura en Internet

Combatiendo la censura en Internet

La Asamblea General de la Organización de las Naciones Unidas (ONU) en uno de esos extraños momentos de lucidez aprobó u...

Crear ventana de ayuda sin JavaHelp

Crear ventana de ayuda sin JavaHelp

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...

Pruebas instrumentadas con Espresso

Pruebas instrumentadas con Espresso

Espresso es un framework de testing propiedad de Google que está dirigido a desarrolladores que creen que las pruebas au...

Comparte lo que sabes

Categorias

Últimas entradas

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...

Herramientas

Generador de Enlaces a Whatsapp