高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

JScriptクラスにログ出力機能をつける

ひさびさにJScript(Windows Script Host)のお話。


JScriptにはCのPerlのuseや、Rubyのrequireなどに相当する、外部ファイルをスクリプトとして読み込む命令がありません(wsfにまとめるという方法もありますが、まとめてしまうと、スクリプトで補足できなかった例外は全く表示されなくなる というどでかい問題があるようなので、論外でした)。

いちおう代替案として、FileSystemObjectを使ってJSファイルを読み込んでeval とかいう方法もありますが、そうすると内部で例外が起こっても、行数が正確に表示されなくなってしまいます。


せめてログを表示させたい と思って、以下のコードを、インクルードするファイルのクラスに追加

SomeClass.prototype = {
  ...
  logstream: undefined,
  _log:function(line)
    {
      if(this.logstream)
        this.logstream.writeline(line);
    }
}

※ logstreamはTextStreamクラスを想定しています

こうすると、logstreamに何かTextStreamを与えればログがTextStreamに出力されます。ちょうどよく、WScript.StdOutなどはTextStreamなので、

var a = new SomeClass();
a.logstream = WScript.StdOut;

としてやると、ログが標準出力に表示されます。ファイルに出力するように書き換えるのも容易なので、結構便利。
JScriptはブラウザベースで使われる言語でもあるし、結構初心者にも取っつきやすい言語だと思うんですが・・・。 今後WSHとしての機能拡張はないということなのが残念。
せめて標準で外部ファイルのインクルード機能くらい付けてほしかったですが・・・。