2013年10月30日水曜日

連載:ちょっとディープなXPages 第2-6回~JavaScriptをもっと知ろう

みなさん!XPages開発していますか!?

今回から、JavaScriptでよく使用されるパターンについてご紹介したいと思います。

その前に、

なぜパターンが必要か?

パターンとは、ソフトウェア開発においてよくある問題に対しての、定型的な解決方法のことです。テンプレートといってもいいでしょうね。

なぜ必要なのかは、私が今更述べなくてもいいでしょうけど、一応おさらい。

簡単に再利用できる

多くの人に使用されていて実績がある

未然にトラブルを防ぐ

などの効能があるので、多くのパターンを習得して使いこなせるといいですね。

名前空間パターン

名前空間とは、名前の集合をグルーピング化する考え方のことです。ネームスペースといったほうがわかりやすいかもですね。

JavaScriptでは、関数名やオブジェクト名が衝突しても後のものが上書きされるだけで、コンパイル時にも実行時にもエラーにならず、バグが見つけにくいものの1つです。

XPagesで、SSJSなどで関数を下記のような書き方をする場合が多いと思いますが、他のスクリプトライブラリで同じ関数名を使ってしまっていても、やはりエラーにならず上書きされるだけです。

function methodName(){
}

名前が衝突しないように、プレフィクスなどを付けることもあるかと思いますが、それでは関数名が長くなって使いづらいですよね。

そこで名前空間パターンです。

名前空間の宣言

名前空間の宣言は、下記のようにします。

var myNameSpace = {}; //名前空間の宣言
myNameSpace.methodName = function(){
}
    

オブジェクト・リテラルの書き方と変わりません。空のオブジェクトを生成しているだけです。

もともとJavaScriptには名前空間の概念はなく、当然そのようなステートメントはありません。JavaScriptの持つオブジェクトの柔軟性を利用しています。

JavaScriptでは、既に存在するオブジェクトにメンバーを追加できる仕様となっています。このパターンでは、空のオブジェクトにメソッドを追加指定だけなんですね。で、この空のオブジェクトを名前空間と見立てているだけです。

入れ子の名前空間

さて、名前空間の中にさらに名前空間は作れるでしょうか?

先程も述べたとおり、既に存在するオブジェクトにメンバーを追加できるわけですから、オブジェクトのメンバとしてオブジェクトを入れることができます。

これを利用すれば入れ子もできます。

var myNameSpace = {}; //名前空間の宣言
myNameSpace.subNameSpace = {}; // 入れ子の名前空間の宣言
myNameSpace.subNameSpace.methodName = function(){
}
    

簡単ですね。

1つ注意があるとすれば、varを付けるのは初めだけということです。この例では変数の宣言は"myNameSpace"だけで、あとはそれにメンバーを追加しているだけですから。

追加できるメンバーはメソッドだけではないですから、文字列や数値を定数として定義することも、もちろんできます。

XPagesでの活用は?

ちなみに、私はXPagesのサーバーサイド・JavaScriptでは、スクリプトライブラリのSSJSの先頭で、ファイル名と同じ名前空間を宣言するようにし、メソッドなどをその名前空間に入れるようにしています。

メソッド名の重複を気にしなくなるので非常に便利です。みなさん試してみて下さい。

海老原 賢次(EBIHARA Kenji)

リコーITソリューションズ株式会社(RICOH IT SOLUTIONS CO.,LTD.)

鹿児島ソリューション部(Kagoshima Department)

0 件のコメント:

コメントを投稿