View

000926.jpg
引き続き出張中。
ホテルからの景色を撮ってみる。

いまだに手の痺れが完全にはとれない。原因はよくわからないが、単に持ち歩いている荷物が重いだけかもしれない。とりあえずは、痛くてキーボードが使えないという状態からは抜け出してはいるが、ちょっと心配。

研修は明日でおしまい。

Park

都会には意外と広い公園がある。
朝食を食べた後、公園を散歩してみる。

[photo]

an official trip

お仕事で出張。出張先のネットワーク環境が不明なのでたぶん更新がとどこおるはず。

カテゴリー: etc

JavaScript generic programming

Ref: JavaScriptによるジェネリックプログラミング

面白い記事を発見。2001年4月10日に掲載されたようなのでもう3年も前の記事のようです。初心者向けにはJavaScriptとこのころから思ってましたが、こういう方向は考えなかったですねぇ。JavaScriptはどうみても機能が不足しているし…

最近ちょっと見直しているのは、初心者用にJavaScriptをとりあげるとしても手続き型言語的な紹介をするのはもったいないしなぁ、と思っているからなのですが、オブジェクトベース言語というのもまたよくわからない中途半端さがあって、難しいなぁと感じる次第です。

User Object definition in JavaScript

あいかわらずJavaScriptについて色々調べてます。JavaScriptでユーザーオブジェクトを定義するには、つぎのような感じになります。コンストラクタ用の関数を定義して、定義したオブジェクトのprototypeに属性を追加していきます。操作の追加もできます。操作は実体を別に用意しておいて名前で束縛するという感じです。ただし、オブジェクト単位での名前空間は定義されないので、オブジェクト用の属性や操作の実体用に _ で始まる名前は予約しておいて、通常の関数では _ を使わないということを考えたりしないといけません。

// コンストラクタ
function Target() {
}
Target.prototype.name = “Target”
Target.prototype.equals = _target_equals;
Target.prototype.toString = _target_toString;

// このオブジェクトと他のオブジェクトが等しいかどうかを示します。
function _target_equals(obj) {
return obj.toString()==this.name;
}
// 文字列表現を返します。
function _target_toString() {
return this.name;
}

「実装の継承」らしきことを実現することもできるようですが、JavaScriptのオブジェクトに関しては型によるチェックはできないので個人的にはあまり意味がないかなという感じです。せっかく操作の実体を指定できるようになっているので、オブジェクトコンポジションの考え方で拡張していく方が、オブジェクトの役割もわかりやすくなりますから良いと思います。ソースコードが少々長くなりますけど、継承の罠にはまりにくくなるので、保守性は高まると思います。

続きを読む

カテゴリー: etc