15:return;16:}());JavaScriptコードが即時関数として記述されていることに注意してください。実行サンプルアーカイブ内の"sample_004.cgx"を以下に示します。これはGoogle検索ページの入力欄に検索ワードを入力するスクリプトです。このスクリプト(sample_004.cgx)の居るディレクトリを返す。jsexeutorクラスの変数"jse"を作成。Executeメソッドの呼出。end()23:endmethod24:endclass三~八行目はゲッタ(getter)というクラスの構成要素(メンバ)の定義です。ゲッタの詳細についてはマニュアルを参照してください。ここでは、十三~十五行目に注目してください。Googleの検索ページ上で実行するJavaScriptコードをファイルからstring(文字列)クラスの変数に読み込んでいます。readerクラスのマニュアルをご覧ください。この中で例として一番格好なのは十四行目です。red.ReadToEnd();この形式の文を、定義文といいます。最初から二つ目までは宣言文と同じ並びですが、等号以降が異なります。図示したように、変数の宣言と初期値を一つの文で決定するのが定義文です。この等号より後を"式"と呼びます。この式、前のセクションで説明した呼出"文"と似ています。browserとreaderの違いはありますが、どちらもドット演算子によるメンバ(メソッド)の呼び出しです。片方では文、もう片方では式。何が二つを分かつのか?それはメソッドの返り値を利用するかどうかです。前々のセクションのメソッド定義の図で少しふれていますが、メソッドは値を返せます。返り値を利用するスクリプトの構成要素を式。利用しない構成要素を文と呼び区別しています。十四行目は、red.ReadToEnd()の返す文字列(stringクラス)をstringクラスの変数jsCodeに代入、つまり利用しています。ReadToEnd()メソッドの呼出は式です。これに対して、red.ReadToEnd()を文として使った場合は、返り値の文字列は捨てられて利用されません。jsexecutor.Execute十八~十九行目が実際にJavaScriptコードを実行している部分です。十八行目でjsexecutorクラスの変数jseを宣言しています。十九行目がJavaScriptの実行部分です。jse.Execute(jsCode);でExecute()メソッドを呼び出しJavaScriptをブラウザに渡して実行させています。この例では、Execute()メソッドからの返り値は利用していませんが、利用することもできます。jsexecutorクラスやExecute()メソッドの詳細についてはマニュアルを参照してください。Execute()メソッドで実行されるJavaScriptコードは"sample_001.js"のように、即時関数形式であるべきです。その理由を以下に示します。JavaScriptから値を返す場合はreturn文が必要ですが、関数定義の中に無いreturn文はエラーになり実行できません。関数定義の中に無い変数はグローバル変数となる危険があります。必要のないグローバル変数による名前空間の汚染は大変危険です。即時関数形式で記述すれば汚染の危険が減ります。