超Flash Lite入門 ActionScript編 その1 配列

皆様、ご無沙汰しておりました。IT7Cです。

iPhoneで楽器アプリを作るはずが、なぜか、ひさびさに情報システムをやっていました。しかも、イキナリ会社移転で、ネットワークの引越し作業で大忙し。そして、なぜか気がついてみればFlash Lite 書いてました...。大分ネタも溜まってきましたので今更Flash Liteかよって感じではありますが、例によってあまり書かれていないネタについて何回かに分けて公開していこうと思います。

第一回目は、Flash Liteの配列についてです。Flash Liteでは配列が利用できない為、主に以下の2つの方法が使用されています。これは周知の事実かと思いますが、まずおさらいということで、、、、。

evalを使って疑似配列を作る

メモリを消費する為、大量のデータ格納には向かない。可変長フォーマット、主に文字列の配列で使用される。

文字列を配列に見立てる

PCでのFlashで良く使われる区切り文字での格納方法は、split関数が使えない為、格納方法としては効率が良くない。split関数がない為、すべての文字列をsubstring関数で都度走査することで実現することになる。(あるいはパースしてeval疑似配列にデータを再格納する。この場合メモリを消費する)、従って主に数値の配列を格納するのに使用され、数値をASCIIコードに変換して使用する。

しかしFlash Liteの文字列はすべてのASCIIコードが使えるわけではなく*1、0x81〜0x9F 0xE0〜0xFCのデータが欠ける。

for(i=0;i<256;i++){
	trace(ord(chr(i)));
}

これは、恐らく、SJISコードの上位1バイトが使えないというのが原因。加えて0x00は文字列終端記号である為文字列として使えない。

つまり0x01(1)〜0x80(128)までは安全に使えるということになるのですが、ビット演算の絡みや扱い易さの観点から0x00(0)=0x80(128)に変換し0x00(0)〜0x7F(127)として使えるようにする。0を使わない場合は、そのまま1〜128までの数値を扱う場合には特に問題はないかと思われます。

*1:Flash Lite勉強会KAYACの千歳さんに、勉強会後に聞いてきました。