Hatena::ブログ(Diary)

ひだちのいろの日記 RSSフィード

2009/11/15

[]XMLStore をコミットしたよ!

XML と ASObject の相互変換を行う XMLStore を Spark にコミットしました.

データ保存やサーバーとのやり取りで使えます.

var store:XMLStore = new XMLStore();
store.register(new PointXMLStorePart(), Point);
			
var point:Point = new Point(20, 30);
var xml:XML = store.toXML(point);

こんな書くと以下のようなXMLを生成できます.

<Point type="flash.geom.Point">
  <x type="Number">20</x>
  <y type="Number">30</y>
</Point>

独自のクラスを変換したいときは XMLStorePart のサブクラスを書いて XMLStore に register すれば OK!

一応ガワは出来上がっているので、あとは Rectangle とか Matrix とかよく使うオブジェクトの XMLStorePart を必要に応じて追加していこうと思います.

興味がある方は使ってみてくださいね!

http://www.libspark.org/wiki/hidachinoiro/XMLStore

2009/11/03

[][]新しい書き方

ECMAScript (JavaScript, ActionScript など) では new の対象に関数を持ってくることができる.

function foo() {}
new foo();

この関数コンストラクタ関数とよび、ふつうはコンストラクタ関数内で this を使って生成されるオブジェクトにアクセスする.

ところがコンストラクタ関数内で新しくオブジェクトを作って返してやると、それが new で生成されるオブジェクトになるらしい.

function foo() {
    var a={};
    return a;
}

// ↓これで返ってくるのは a だよ!
new foo();

この a を関数とすることもできる.また、コンストラクタ関数内で a にプロパティを設定することもできる*1ので、

  1. ふつうにメソッドやプロパティを持つ
  2. しかも関数として呼べる

不思議なオブジェクトを new で生成することが可能だ.

function foo() {
    var a = function(){ return "test"; };
    a.say = function(){ return "hello"; };
    return a;
}

a.say() // hello
a();    // test

これをメソッドチェーンの形と混ぜてやると以下のような書き方が合法になる.

a = new foo(); // <-- 関数としても呼べるオブジェクト
a.foo(5)
 .bar(4)
 (2)
 .foo(5);

これでなにかおもしろいライブラリが作れないか考え中.

*1:ただし ActionScript の場合は変数の型宣言を * にするのを忘れずに

2009/04/29

[][]xyzzy で fcsh を利用する xyzzy fcsh を更新した

いろいろ気になっていたところを直しました。

結構大きめの変更。関数の仕様とかも変わっているので旧版を利用していた人は注意!*1

http://www.libspark.org/wiki/hidachinoiro/xyzzyfcsh

  • 複数の fcsh バッファを作成できるようになった(バージョン毎に fcsh を起動したりできる)
  • コンパイルだけでなく任意のコマンドを fcsh に送れるようになった
  • キー毎に違う引数で↑の関数を呼ぶようにすればひとつの fcsh でメインアプリとテストのコンパイルを使い分けるとかも可能!
  • エラーを検索してジャンプできるようになった
  • 関数リファレンスをちゃんと(笑)書いた

*1:旧版はちゃんと残してあります

2009/02/13

[]Next をコミットしたよ!

みんなで使える ActionScript ライブラリを集めている Spark Project に拙作 Next をコミットさせていただきました!

http://www.libspark.org/wiki/hidachinoiro/Next

Next は ActionScript で非同期処理を簡素に書くために作られたライブラリです。

// もっとも簡単な例
// 画像ロードが終了したらディスプレイオブジェクトに追加
N.load("image.png").then = function(loader:Loader):void {
    addChild(loader);
}

非同期処理のライブラリは様々あるのですが、このライブラリはできるだけコードの記述量が減り、しかも簡素に書けるように設計してみました。ビューとコントローラを完全に分離し、かっちりした設計を目指す Thread(という有名な非同期処理ライブラリがあります)とは別の思想の元に作られたライブラリです。

ActionScript でゲームとか作るときに役立つと思います。興味のある方はぜひリンク先を覗いてみてくださいね!

2008/11/13

[]xyzzy fcsh をコミットしてみたよ!

この前書いた xyzzy から fcsh を使うマクロを Spark Project にコミットしてみました。

http://www.libspark.org/wiki/hidachinoiro/xyzzyfcsh

例のエントリにコメントいただいて、うーん、やっぱり公共の場所にさらしておいた方がみんなに使ってもらえるよなーと思ったわけです。バグとか残ってる気がするけど気にしない―