Home / Programmazione / Java / Utilizzare Javascript dentro Java
Mattepuffo

Utilizzare Javascript dentro Java

Utilizzare Javascript dentro Java

Java 8 porta con se molte novità, una delle quali è che quella di poter usare script Javascript in maniera diretta ed interoperabile.

Tutto ciò grazie al nuovo motore Nashorn!

Con il JDK 8 è possibile sia usare Javascript dentro Java, che richiamare classi Java dentro script JS.

Noi vedremo esempi del primo caso; il caso inverso non lo gradisco molto in quanto si dovrebbero usare funzioni JS non standard.

Vedremo una semplice classe che espone un unico metodo con due esempi distinti:

public class JavaJS {

    public static void main(String[] args) throws ScriptException, FileNotFoundException, NoSuchMethodException {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

        // PRIMO ESEMPIO
        String js = "print('CIAO')";
        engine.eval(js);

        // SECONDO ESEMPIO
        FileReader reader = new FileReader("script.js");
        engine.eval(reader);

        Invocable inv = (Invocable) engine;
        Integer result = (Integer) inv.invokeFunction("somma", 1, 2, 3);
        System.out.println(result);
    }

}

Prima di tutto impostiamo lo ScriptEngine.

Poi nel primo esempio, scriviamo direttamente il codice JS come uno oggetto String, e lo passiamo alla funzione eval.

Questo non è molto comodo; molto meglio tenere il codice JS in un file separato.

Creiamo quindi un file JS con questo dentro:

print('FACCIAMO LA SOMMA:');

var somma = function(a, b, c) {
  return a + b + c;
}

Abbiamo un print e poi una funzione che accetta tre parametri.

Con un oggetto FileReader apriamo il file JS, e sotto invochiamo la funzione e passiamo i valori.

Nella nostra console vediamo il risultato.

Questo tipo di interoperabilità mi piace molto, perchè a volte alcune operazioni è più facile farle con altri linguaggi; e Javascript sta avendo una crescita esponenziale.

Per me è un motivo per non abbandonare Java!

Enjoy!