記憶される実行情報
このBeanShellは「対話型」のスクリプト環境です。対話型の最大の特徴、それは「実行した内容を記憶している」という点です。例えば、こんなコードを実行してみましょう。
bsh % x = 100;
「あれ? int x = 100;じゃないか?」と思った人。もちろん、Javaならそうです。が、BeanShellはあくまで「スクリプト処理環境」です。Javaの言語仕様にそって書かれたコードを解釈できるということであって、「Javaそのもの」というわけではありません。例えば、ここに書いたように、変数のタイプを指定しなくとも動いてしまいます。そのあたり、いかにも「スクリプト的」な使い方ができるのですね。
さて、ここに書いたコードにより、変数xに100が設定されました。これを実行することで、BeanShellの内部では、変数xがメモリに割り当てられ、そこに100が設定されたわけです。つまり、実行した結果生まれた変数xは、この後もずっと(シェルを終了しない限り)存在し、利用することができるようになるのです。
bsh % System.out.println(x * 2);
<New Bsh Workspace>変数xが保持され、いつでも使えるようになっていることがわかる。 |
例えば、こんな具合に実行すれば、「200」と出力されます。変数xが生きていることがわかりますね。――ところが、ここでもうちょっと面白いことにも気がついて欲しいのです。デスクトップ部分をクリックして<New Bsh Workspace>メニューを選び、新しいウインドウを作ってください。そして、こちらで、
bsh % System.out.println(x * 2);
まったく同じコードを実行してみましょう。今度は、「// Error: EvalError:」といったエラーメッセージが表示されます。この新しいシェル・ウインドウの中では、変数xは存在しないのです。
<New Bsh Workspace>新しいウインドウでは、変数xを使おうとするとエラーになる。 |
このように、BeanShellでは、ウインドウごと(というより、実行しているシェルごと)に実行される内容は独立して管理されます。あるシェルから実行した結果は、そのシェルの中だけで通用するのです。
ということは? 複数のシェルを開いて操作すれば、同時に複数のプログラムを処理することもできるというわけです。これは、使いこなせばなかなか強力そうですね!