Java - Nashorn JavaScript Engine

こんにちは、志望プログラマーの皆さん! Nashorn JavaScript EngineとJavaの世界に魅力的な旅を楽しむためのガイドとして、君たちと共になれて嬉しいです。計算機科学を10年以上教えてきた者として、これが楽しくて启発的な経験になることを保証します。では、始めましょう!

Java - Nashorn JavaScript

Nashorn JavaScript Engineとは?

Nashorn(ナショーン、読み「なっしょーん」)は、Java 8で導入された軽量で高性能なJavaScriptエンジンです。JavaとJavaScriptの間の橋のような存在で、Javaアプリケーション内でJavaScriptコードを実行できます。クールでしょう?

少しの歴史

私が教え始めた頃、JavaとJavaScriptには別々の環境を使う必要がありました。まるでピーナッツバターとジェリーのサンドイッチを別々のプレートで作ろうとするようなものでした! Nashornはそれを変え、これら二つの強力な言語を一つの魅力的な組み合わせにしたのです。

コマンドラインツールを使ってJavaScriptを実行する

まず、簡単なことから始めましょう。Nashornには、ターミナルから直接JavaScriptを実行できるjjsというコマンドラインツールが付属しています。

例1: Hello, Nashorn!

コマンドプロンプトを開き、以下を入力してください:

jjs
print("Hello, Nashorn!");

画面に"Hello, Nashorn!"と表示されれば成功です。おめでとうございます!Nashornを使って最初のJavaScriptコードを実行しました。

コマンドプロンプトから直接JavaScriptを実行する

JavaScriptファイルもコマンドラインから直接実行できます。

例2: JavaScriptファイルの実行

  1. greet.jsという名前のファイルを作成し、以下の内容で保存してください:
var name = "Alice";
print("Hello, " + name + "!");
  1. jjsを使って実行してください:
jjs greet.js

画面に"Hello, Alice!"と表示されれば成功です。

jjsに引数を渡す

Nashornでは、Javaと同様にJavaScriptコードに引数を渡すことができます。

例3: 引数の渡し

greet_with_args.jsという名前のファイルを作成してください:

var name = $ARG[0];
print("Hello, " + name + "!");

引数とともに実行してください:

jjs greet_with_args.js -- Bob

画面に"Hello, Bob!"と表示されれば成功です。

JavaからJavaScriptを呼び出す

さて、本当に楽しみの部分です - Javaコードの中からJavaScriptを呼び出す方法を見ていきましょう!

例4: Java内でJavaScriptを評価する

import javax.script.*;

public class JavaScriptInJava {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

engine.eval("print('Hello from JavaScript!');");
}
}

このJavaプログラムを実行すると、Nashornエンジンを使って"Hello from JavaScript!"と表示されます。

JavaScriptからJavaを呼び出す

Nashornの真の力は、JavaScriptコードの中でJavaクラスやメソッドを使用できることにあります。

例5: JavaScriptでJavaクラスを使用する

import javax.script.*;

public class JavaInJavaScript {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

engine.eval("var ArrayList = Java.type('java.util.ArrayList');" +
"var list = new ArrayList();" +
"list.add('Hello');" +
"list.add('World');" +
"print(list);");
}
}

このコードは、JavaのArrayListを作成し、要素を追加して表示する - すべてJavaScriptの中から行います!

高度な機能

NashornはJava開発者にとって強力なツールとなる多くの高度な機能を提供します。

例6: Java 8 Lambda式の使用

import javax.script.*;

public class LambdaInNashorn {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

engine.eval("var list = [1, 2, 3, 4, 5];" +
"list.forEach(function(num) { print(num * 2); });");
}
}

この例では、Nashorn上で実行されるJavaScriptコードの中でJava 8のlambda式を使用する方法を示しています。

メソッド一覧

以下は、Nashornで使用できる重要なメソッドの一覧です:

メソッド 説明
ScriptEngineManager.getEngineByName("nashorn") Nashornスクリプトエンジンを取得
ScriptEngine.eval(String script) JavaScriptスクリプトを評価
ScriptEngine.put(String key, Object value) スクリプトエンジンに変数を設定
ScriptEngine.get(String key) スクリプトエンジンから変数を取得
Invocable.invokeFunction(String name, Object... args) JavaScript関数を呼び出す

結論

それで、今日はここまでです、皆さん!Nashornができることのほんの一部を触れただけですが、この入門編が皆さんの興味を引いたことを願っています。覚えておいてください、プログラミングをマスターする鍵は練習ですので、これらの例を試して、自分のものを作ってみてください。

いつも生徒に言うように、コーディングは自転車の乗り方を学ぶようなものです - 最初は怖いかもしれませんが、練習すればすぐにかけつけます。そして、誰しもが知ることではありませんが?いつかは、他の人にもNashornの素晴らしさを教える日が来るかもしれません!

コーディングを続け、学び続け、そして最も重要なのは楽しんでください!次回まで、このような友好的な近所の計算機科学の教師として、さようなら。幸せなコーディングを!

Credits: Image by storyset