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!
java javascript nashorn print eval string filereader.scriptengine
Commentami!