Java 8 Nashorn JavaScript

Java 8 新特性Nouveautés de Java 8


Nashorn est un moteur JavaScript.

Le moteur JavaScript Nashorn n'est plus disponible dans Java 15.

Ceci a été marqué comme déprécié dans Java 11 :

@deprecated (forRemoval = true)

À partir du JDK 1.8, Nashorn a remplacé Rhino (JDK 1.6, JDK 1.7) comme moteur JavaScript embarqué de Java. Nashorn prend entièrement en charge la spécification ECMAScript 5.1 ainsi que certaines extensions. Il utilise de nouvelles fonctionnalités du langage basées sur JSR 292, y compris invokedynamic introduit dans JDK 7, pour compiler du JavaScript en bytecode Java.

Par rapport à l'implémentation précédente de Rhino, cela apporte une amélioration des performances de 2 à 10 fois.


jjs

jjs est un outil en ligne de commande basé sur le moteur Nashorn. Il accepte du code source JavaScript en paramètres et exécute ce code source.

Par exemple, nous créons un fichier sample.js avec le contenu suivant :

print('Hello World!');

Ouvrez la console et saisissez la commande suivante :

$ jjs sample.js

La sortie du programme ci-dessus est :

Hello World!

Programmation interactive avec jjs

Ouvrez la console et saisissez la commande suivante :

$ jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>

Passage de paramètres

Ouvrez la console et saisissez la commande suivante :

$ jjs -- a b c
jjs> print('字母: ' +arguments.join(", "))
字母: a, b, c
jjs> 

Appel de JavaScript depuis Java

En utilisant ScriptEngineManager, le code JavaScript peut être exécuté en Java, comme le montre l'exemple suivant :

Fichier Java8Tester.java

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 = "Example"; 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()); } }

Exécutez le script ci-dessus, le résultat de sortie est :

$ javac Java8Tester.java 
$ java Java8Tester
Example
12


Appel de Java depuis JavaScript

L'exemple suivant montre comment référencer des classes Java en JavaScript :

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);

Nous utilisons la commande jjs pour exécuter le script ci-dessus, et la sortie est la suivante :

$ jjs sample.js
78952000000000002017.94

Java 8 新特性Nouveautés de Java 8

Autres extensions