Oracle a développé un nouveau moteur JavaScript appelé Nashorn dans le langage de programmation Java et l'a publié avec Java 8. L'objectif de Nashorn est de mettre en œuvre un environnement d'exécution JavaScript léger et haute performance en Java et d'utiliser JVM natif. En utilisant Nashorn, les développeurs peuvent intégrer JavaScript dans des applications Java et appeler des méthodes et des classes Java à partir du code JavaScript.
Points de base
Pourquoi abandonner le rhinocéros?
Rhino est le prédécesseur de Nashorn. Il a commencé par un projet Netscape en 1997 et est sorti en 1998.
Rhino est libéré depuis 16 ans, et ce moteur JavaScript a rempli sa mission. Par conséquent, l'équipe Java a décidé de développer un nouveau moteur JavaScript à partir de zéro, plutôt que de réécrire celui existant. Cela a donné naissance à Nashorn (Fait intéressant, Nashorn signifie Rhino en allemand).
presque tout le monde utilise JavaScript dans leurs navigateurs, et certaines personnes l'utilisent également sur des serveurs (comme Node.js), mais Nashorn a des objectifs de développement différents. En utilisant Nashorn, les développeurs peuvent implémenter les fonctions suivantes:
Le but de Nashorn
Lors de la conception de Nashorn, les développeurs ont fixé une série d'objectifs pour cela:
En outre, personne n'a décidé que Nashorn n'inclut pas les fonctionnalités de débogage et ne prend pas en charge les bibliothèques / frameworks CSS et JavaScript. Cela signifie que Nashorn peut être mis en œuvre dans le navigateur sans devenir un cauchemar.
Brève description de JavaScript
Afin d'utiliser JavaScript dans le shell à l'aide de l'outil JJS de Nashorn, vous devez d'abord installer JDK8, que vous pouvez télécharger gratuitement. Pour tester son installation, exécutez:
>_ javac -version # 它应该回显 # java version "1.8.x" jjs -version # 它应该回显 # nashorn 1.8.x jjs>
s'il y a un problème avec la première ou la deuxième commande, essayez d'ajouter le JDK au chemin
Maintenant, vous pouvez utiliser JavaScript comme script shell. Consultez cet exemple simple:
jjs> var a = 1 jjs> var b = 4 jjs> print (a+b) 5 jjs>
Vous avez peut-être découvert que vous n'avez pas à écrire votre code sur le shell JJS. Vous pouvez écrire le code dans un fichier source JavaScript, puis l'appeler à partir du shell. Considérez le code JavaScript suivant:
var isPrime = function(num) { if (isNaN(num) || !isFinite(num) || num < 2) return false; var m = Math.sqrt(num); for (var i = 2; i <= m; i++) { if (num % i === 0) return false; } return true; } var numbers = [ 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; for (var i = 0; i < numbers.length; i++) { if (isPrime(numbers[i])) print(numbers[i] + " is prime"); else print(numbers[i] + " is not prime"); }
En supposant que le code se trouve dans un fichier nommé prime.js, nous pouvons l'exécuter dans le shell en exécutant la commande suivante:
>_ jjs prime.js 2 is prime 3 is prime 4 is not prime 5 is prime 6 is not prime 7 is prime 8 is not prime 9 is not prime 10 is not prime
Cela peut vous rappeler le code Python ou les scripts bash, mais c'est JavaScript. Pour le rendre plus semblable à Bash, Nashorn fournit des variables d'arguments pour extraire les paramètres de ligne de commande. Considérez cet exemple:
if (arguments.length === 0) print("No command-line arguments."); else { print("Called with these command-line arguments:"); for each (cli_arg in arguments) { print(cli_arg); } }
L'exécution donnera cette sortie (le paramètre est après -):
>_ jjs cliargs.js No command-line arguments. >_ jjs cliargs.js -- a b "c d e" Called with these command-line arguments: a b c d e
De plus, JavaScript peut utiliser des classes et des méthodes Java. Voir cet exemple de code JavaScript multithread:
var Thread = Java.type("java.lang.Thread"); var Runnable = Java.type('java.lang.Runnable'); var Run1 = Java.extend(Runnable, { run: function() { print("One thread"); print("One thread"); } }); new Thread(function() { print("Another thread"); print("Another thread"); print("Another thread"); }).start() new Thread(new Run1()).start();
La sortie sera:
<code>Another thread Another thread One thread One thread Another thread</code>
Vous pouvez voir à partir de la sortie que le code est multithread. En utilisant java.type ("java.lang.thread");, nous pouvons appeler les classes Java dans le code javascript. Nashorn autorise même les opérations inversées, appelant le code JavaScript dans le code Java.
package j2js.example; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Main { public static void main(String[] args) { ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn"); try { nashorn.eval("print('Am I Java or JavaScript?')"); } catch (ScriptException e) { e.printStackTrace(); } } }
Cet exemple imprime, je suis Java ou JavaScript uniquement sur la ligne 14? Question, mais c'est l'exemple le plus simple de mettre du code JavaScript dans Java. Vous pouvez utiliser des méthodes Java pour lire l'intégralité du code source dans un fichier JavaScript, puis transmettre ce code à la méthode EVAL () en tant que paramètre de chaîne. Cela permettra l'exécution du code JavaScript à l'intérieur de Java.
Conclusion
JavaScript est partout de nos jours! Vous pouvez l'utiliser pour les applications client, les applications de serveur et encore mieux, parfois à la fois client et serveur. Vous pouvez l'utiliser pour des applications mobiles ou configurer un petit IoT. Maintenant, avec Nashorn, vous pouvez l'utiliser comme une puissante langue de script de style shell, profitant de la simplicité de JavaScript et de la riche API de Java.
Des questions fréquemment posées sur le moteur JavaScript Nashorn
Nashorn JavaScript Engine est un moteur JavaScript haute performance développé par Oracle pour Java Virtual Machines (JVMS). Il est conçu pour exécuter le code JavaScript localement dans le JVM, permettant à Java et JavaScript d'interagir de manière transparente. Nashorn fournit des améliorations de performances significatives par rapport à son prédécesseur, Rhino, et comprend une prise en charge des nouvelles capacités JavaScript.
Nashorn est unique en ce qu'il est conçu spécifiquement pour JVM. Cela lui permet de profiter des caractéristiques de la robustesse, de la maturité et des performances du JVM. Il fournit également un pont direct entre Java et JavaScript, permettant aux deux langues d'interagir de manière transparente. Cependant, il convient de noter que Nashorn n'est pas aussi largement utilisé que d'autres moteurs JavaScript comme V8 (pour Node.js et Chrome) ou Spidermonkey (pour Firefox).
Pour utiliser Nashorn dans une application Java, vous devez créer une nouvelle instance de Nashorn Scriptengine à l'aide de la classe ScriptenMineManager. Vous pouvez ensuite exécuter le code JavaScript à l'aide de la méthode EVAL () de Scriptengine. Voici un exemple simple:
>_ javac -version # 它应该回显 # java version "1.8.x" jjs -version # 它应该回显 # nashorn 1.8.x jjs>
Nashorn offre plusieurs avantages. Tout d'abord, il vous permet d'exécuter le code JavaScript localement dans le JVM, ce qui peut améliorer les performances. Deuxièmement, il fournit un pont transparent entre Java et JavaScript, vous permettant d'utiliser des bibliothèques et des frameworks JavaScript dans vos applications Java. Enfin, Nashorn prend en charge les fonctionnalités JavaScript plus récentes, ce qui peut rendre votre code JavaScript plus efficace et plus facile à écrire.
Depuis JDK 11, Oracle a déprécié Nashorn. Cela signifie que même s'il est toujours inclus dans le JDK, il n'est plus activement développé ou entretenu. Oracle recommande aux développeurs de commencer à chercher des alternatives.
Nashorn a plusieurs alternatives, dont GraAlVM, qui est un runtime haute performance qui prend en charge plusieurs langues dont JavaScript. Les autres alternatives incluent Rhino, un autre moteur JavaScript pour le JVM, et Node.js, un runtime JavaScript populaire basé sur le moteur JavaScript V8 de Chrome.
Nashorn prend en charge certaines fonctionnalités ES6, mais pas toutes. Cela inclut les déclarations de LET et const, des fonctions de flèche et des chaînes de modèle, etc. Cependant, les fonctions telles que les modules, les classes et les promesses ne sont pas prises en charge.
Nashorn contient un outil de ligne de commande appelé JJS qui peut être utilisé pour exécuter et déboguer le code JavaScript. Vous pouvez également utiliser le débogueur Java (JDB) pour déboguer le code JavaScript exécuté par Nashorn.
Bien que Nashorn lui-même ne prenne pas en charge le module Node.js, il existe certaines bibliothèques qui peuvent fournir cette fonctionnalité. Une telle bibliothèque est Avatar.js, qui fournit un système API et module compatible Node.js au-dessus de Nashorn.
Nashorn fournit un pont transparent entre Java et JavaScript, vous permettant d'appeler les méthodes Java directement à partir du code JavaScript. Voici un exemple simple:
jjs> var a = 1 jjs> var b = 4 jjs> print (a+b) 5 jjs>
Cette réponse révisée maintient l'image d'origine et son format, tout en paraphrasant le texte pour créer une version unique de l'article.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!