アドアチーブ株式会社

アドアチーブ株式会社 オフィシャルブログ

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を組み込むようなものを作っていたら。

そして、最初は正しく動いていて、データ量が増えたら発覚するようなバグだったら。

本日はまたも、終わってみればしょうもない理由で、

膨大な時間がデバッグに消費されてしまいました。

最初から丁寧に書いていれば、そんなこと無かったろうに。と。

綺麗なスクリプトはやっぱり大事ですね。

長い目でみて、生産性の向上につながります。

常々心がけていきたいものです。

この記事へのトラックバック

トラックバックURL:  http://www.adachieve.com/~mt/mt334/mt-tb.cgi/795


この記事へのコメント

1. Posted by a   2007年12月18日 17:51

8進数だよ

2. Posted by 田原   2007年12月18日 22:29

a 様
突っ込みありがとう御座います。

検証はしていないのですが、
HELPによるとMXでは10進数みたいです。

8ではaさんのおっしゃるとおり、
ストリングは8進数ですね。

あいまいな書き方訂正しました。m(_ _)m


名前:
E-mail:
URL:
  情報を記憶: