Moteur JavaScript Nashorn de Java 8 : Performances et outil jjs
Java 8 introduit Nashorn, un moteur JavaScript largement amélioré remplaçant Rhino. Nashorn offre des performances 2 à 10 fois supérieures grâce à la compilation directe en bytecode en mémoire, transmis à la JVM. Il exploite la fonctionnalité invoke dynamics introduite en Java 7.
L'outil en ligne de commande jjs
Java 8 fournit jjs, un nouvel outil en ligne de commande pour exécuter du code JavaScript dans la console.
Interprétation d'un fichier .js
Créez et enregistrez sample.js dans C:\JAVA :
sample.js
print('Hello World!');
Dans la console :
C:\JAVA>jjs sample.js
Sortie :
Hello World!
Mode interactif jjs
C:\JAVA>jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>
Passage d'arguments
C:\JAVA>jjs -- a b c
jjs> print('letters: ' + arguments.join(", "))
letters: a, b, c
jjs>
Appel de JavaScript depuis Java
Via ScriptEngineManager, le code JavaScript peut être évalué depuis Java.
Exemple
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Java8Tester {
public static void main(String args[]) {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
String name = "Mahesh";
Integer result = null;
try {
nashorn.eval("print('" + name + "')");
result = (Integer) nashorn.eval("10 + 2");
} catch (ScriptException e) {
System.out.println("Erreur d'exécution du script : " + e.getMessage());
}
System.out.println(result.toString());
}
}
Vérification
C:\JAVA>javac Java8Tester.java C:\JAVA>java Java8Tester
Sortie :
Mahesh 12
Appel de Java depuis JavaScript
Importer et utiliser des classes Java dans du code JavaScript :
sample.js
var BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
var result = new BigDecimal(amount).multiply(new BigDecimal(percentage))
.divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
return result.toPlainString();
}
var result = calculate(568000000000000000023, 13.9);
print(result);
Exécution :
C:\JAVA>jjs sample.js
Sortie :
78952000000000000003.20
Java
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Commentaires Java : Types, utilisation et bonnes pratiques
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code