複数変数の一括代入2006年05月09日 21時47分

JavaScript 1.7 (Gecko 1.8.1 / Firefox 2 にて実装予定) では destructuring assignment とやらがサポートされ、以下のように複数の変数に一括して代入することが可能になるという。

[a, b, c] = [10, 20, 30];
alert(a); // 10

これが Opera ではすでに実装されているというので実際に試してみたところ手元の Opera 8.5 で無事動いた。いつから実装されていたのかは知らないが Opera あなどりがたし。

関数合成の野望ついえたり2006年05月18日 02時57分

いちいち functionreturn と書くのは面倒くさいという理由で関数合成・引数束縛に手を染めたわけだけど、「nazonoDiary - DHTMLで子を探す、親を捜す」にてそれでは対応できないパターンを発見。それが以下のパターン (改行はこちらで挿入)。

searchParentByTagName = function(e,tagName){
  return searchParent(e,function(n){return tagNameEqual(n,tagName)}); 
}

内側の function expression を置き換えることはできるんだけど……、

searchParentByTagName = function (e, tagName) {
  return searchParent(e, tagNameEquals.bind(_1, tagName));
};

ここから先がうまくいかない。一応無理やりやってやれないこともないのだが……、

searchParentByTagName = searchParent.bind(_1,
  "call".bind(tagNameEquals, "bind", new Function.Literal(_1), _2));

きれいでないしあまり短くなった感がしないし何より Function.Literal という本来裏方に徹しているはずのクラスが表に出てきている。

Function.Literal を隠すというだけなら _1.literal() といった表記を導入するという手もあるのだが、そもそもこういった場合どういう表記をしたものか思い浮かばない (boost::bind でこのパターンを表現できるのか?)。やはり言語機能としてラムダ式をもっと簡単に書けるようにしてほしいな。lambda (x) x * x とか。

JavaScript でメソッド名自動生成2006年05月18日 04時07分

JavaScript でもメソッド名自動生成はできる……といっていいんだろうか? JavaScript の一実装に過ぎない SpiderMonkey の独自拡張機能にあるだけで ECMAScript はもちろん JScript でもできないからダメかな? まあ一応できる実装もある。「404 Blog Not Found:Perl Monger の質問 - AUTOLOADって他でどうやるの?」で挙げられていた例でいうとこんな感じ。

// SpiderMonkey のみ (Firefox など)

function UnicodeChar() {}

UnicodeChar.prototype.__noSuchMethod__ = function (name) {
  var c = String.fromCharCode(name.replace(/^u/, "0x"));
  return (this[name] = function () {return c;})();
};

var u = new UnicodeChar();
alert(u.u5c0f() + u.u98fc() + u.u5f3e()); // 小飼弾

一応 perl の goto &$AUTOLOAD に相当するものだと思うけど perl は詳しくないから外してるかも。それから ActionScript には __resolve とか flash.util.Proxy とかがあるらしいからそれでいけるのかな? あとは JavaScript 2 でそこらあたりが標準でサポートされるみたいだからそれを待つか。

セルフトラックバック2006年05月18日 04時55分

セルフトラックバックという行為を初めて見たときは正直疑問だったんだけど実際やってみると (私が) 楽なのでまあいいかなという気分になってくる。

しかし最近のトラックバック一覧に自ブログの記事が並ぶのはあまり気分がよくないので以下のような要望をアサブロに出してみる。

  • 管理画面の「トラックバック一覧」からそのトラックバックを「最近のトラックバック」に表示するかどうか選べるようにしてほしい (それ用のチェックボックスまたは「状態」を追加することなどで) 。あるいは、
  • 自ブログからのトラックバックは「最近のトラックバック」に表示しないようにしてほしい。

もちろん優先順位は最低でかまわない。(とはいっても今やアサブロに関するあらゆる事柄の優先順位が最低になっているような気もしないではないのだが。:-P)

窓口から意見を送ろうかとも思ったけど別に破棄されてもかまわないようなものなのでアサブロ information にトラックバックを送るにとどめる。