2007.01.18FLASHで数字のストリングスとNumber
都合でFLASH MXを使っているのですが、
スクリプト中、なぜ?
というところがあり、これも少し躓いたのでメモ程度に。
actionScriptは、
変数の内容をきちんと指定することも出来るのですが、
横着も出来ます。
(3はダメですけど)
たまたま、ある変数に「001」とか、
そうゆう3桁の数字をストリングで入れてたんですね。
で、配列の番号指定で使おうと思ったわけです。
こんな感じで。
myArray = new Array(1,2,3,4,5);
st = "001";
st = Number(st);
myNumber = myArray[st];
「こんな書き方でもいけるでしょ。多分。」と思ったのです。
で、事実、001〜009位まではいけてたんですね。
ところが、010位から、なぜかうまくいかなくなってしまいました。
010 は 8
011 は 9
とかになってしまうんです。
どうやら
Numberは中身がストリングの場合、
指数表現を伴う10進数として解析しようとすることがあるとのこと。
HELPにも書いてあります。
(2007.12/18追記)----------------------------------
10進数として解析しようとするのはMXで
8は8進数としてかいしゃくするようです。
-----------------------------------------------------------------
FLASHでも正規表現が使えたらなぁ。とため息をもらしつつ、
myArray = new Array(1,2,3,4,5);
st = "001";
stToNum = (st.slice(0,1) == "0")?st.slice(1):st;
stToNum = (stToNum.slice(0,1) == "0")?stToNum.slice(1):stToNum;
myNumber = myArray[stToNum];
のように変更したら正しく動いてました。
FLASH MXで作ってましたが8でも同じです。
お伝えしたかったのは、
HELPに書いてあるようなことでも、
ごちゃごちゃになったスクリプトの中では
見つけるのが難しいですね。
ということです。
バグが発覚したときは、とてつもなく不可解な動きに見えました。
関数を何個もたどり、ループの中身を見直し、
デバッグ用に関数を作り、時間をかけて長いアニメーションを見て、ようやく発見。と。
アニメーションとスクリプトが入り乱れたタイムラインで、skip出来ない後ろの方にバグがあったら。
しかも、SWF単独では動作せず、何かのアプリの一部にSWFを組み込むようなものを作っていたら。
そして、最初は正しく動いていて、データ量が増えたら発覚するようなバグだったら。
本日はまたも、終わってみればしょうもない理由で、
膨大な時間がデバッグに消費されてしまいました。
最初から丁寧に書いていれば、そんなこと無かったろうに。と。
綺麗なスクリプトはやっぱり大事ですね。
長い目でみて、生産性の向上につながります。
常々心がけていきたいものです。
この記事へのコメント
8進数だよ
a 様
突っ込みありがとう御座います。
検証はしていないのですが、
HELPによるとMXでは10進数みたいです。
8ではaさんのおっしゃるとおり、
ストリングは8進数ですね。
あいまいな書き方訂正しました。m(_ _)m

