はじめてのRhino
30分プログラム、その96。Javaで実装されたJavascript処理系であるRhinoを試してみる。
id:Gemma:20070708によるとNext Big Languageらしい。でも、call/ccとはまだ出会っていない。探してもいないんだけど。
インストール
http://www.mozilla-japan.org/rhino/download.html
シェル(対話環境)、インタプリタ、コンパイラ(Javaのclassファイルを作る)、GUIデバッガ(JavaのGUI)が用意されている。ただ、そのままでは使いづらいので、いくつか起動用のスクリプトを書いた。
まず、アーカイブに同梱されていたjs.jarを/opt/manual/rhinoにおいた。
js(シェル兼インタプリタ):
#!/bin/sh java -classpath /opt/manual/rhino/js.jar \ org.mozilla.javascript.tools.shell.Main "$@"
jsc(コンパイラ):
#!/bin/sh java -classpath /opt/manual/rhino/js.jar \ org.mozilla.javascript.tools.jsc.Main "$@"
jsdb(GUIデバッガ):
#!/bin/sh java -classpath /opt/manual/rhino/js.jar \ org.mozilla.javascript.tools.debugger.Main "$@"
使い方
hello.jsに次のように書いたとして、
print('Hello,world!!');
次のように実行する。
$ js hello.js Hello,world!!
コンパイラやデバッガは動作することは確認したけど、使い方は調べていない。
サンプルコード
Javaとの連携ができるので、Swingを使ってGUIを作ってみた。
print('Hello,World!!!'); java.lang.System.out.println('Hello,Java!!'); // swing importPackage(Packages.javax.swing); frame = new JFrame('Hello!'); frame.setSize(200,100); button = new JButton('Hello,Swing!!'); button.addActionListener(function(){ // great!! print('click!!'); }); frame.add(button); frame.visible = true; // great!! while(1){}
簡単に連携する方法をまとめておく。
- Packages変数の下にマップされる
- setter/getterがプロパティっぽく扱える
- frame.setVisible(true); -> frame.visible = true
- メソッドがひとつだけのリスナは、クロージャで代用できる
- button.addActionListener(function() {...});
実にすばらしい。特にリスナの代りにクロージャが使えるのがすばらしすぎる。