週末会社にて開発詰めの修正を行っていると、刻々と過ぎる時間の大切さを切に感じます。

今回は“時”つながりで、Flashに馴染み深い「getTimer」の小話です。

開発中、複数の同系オブジェクトを生成した時ですが、オブジェクト名をランダムに付けようとした際に、getTimerを再帰内で掛けました。
getTimerを用いれば重複しない数字が名前になると考えたためです。

Math.randomの乱数を用いた方法や、ユニークな文字列を生成する方法もありますが、この時の気分はgetTimerでした。

処理の内訳は、以下のようなものです。

import flash.display.Sprite; import flash.utils.*; /** * 複数生成 */ function createList() { var child:Sprite; for (var i:int = 1; i < 999; i++) { child = new Sprite(); child.name = "child"+getTimer(); } }

上記を走査中、生成オブジェクト名の結果が何度か変化しました。
期待と異なり、同じオブジェクト名が生成される時があるのです。

今回、オブジェクト名を元に処理を他の関数で行う際、オブジェクト名の参照によるバグが生じ(オブジェクト名の重複による参照違い)発見に至りました。

上記の結果より、再帰処理のスピードがFlash上のgetTimer値を更新するのよりも早い段階があるのだと推測します。

再帰処理中に、getTimerを用いてのユニークな処理は推奨されないようですね。

“時”は使いどころ。足元をすくわれたので、今後は気をつけていこうと思います。

HTML5飯