- 2004-02-25 (水)
- ActionScript
var test = [ "a","b","c" ]; for (var i in test){ trace(test[i] + " : " + i); } [実行結果] c : 2 b : 1 a : 0
↑配列をループ処理させたつもりが、よく見ると配列の要素が降順 で処理されています。
ActionScript1.0/ActionScript2.0 どちらも同じ挙動でした。Macromedia Exchange にて入手したスクリプトの動作確認していたところ、たまたま発見。Exchangeのサイトを見ると「累計ダウンロード人数7000人強」... 過去7000人、誰も作者にツッコミ入れてあげなかったって事なんだろうか。初めてのExchange利用だったのでサービスに対して軽く不信感抱いてしまいました。とりあえず作者にバグ報告のメール出してみたものの... どんな返答が帰ってくるのか不安。「あぁそんなの知ってて直してないんだよ huh」みたいな応対されたらヘコむなぁ。
で、perl で良くやる
@hoge = qw(a b c d); foreach (@hoge){ print "$_\n"; } [実行結果] a b c d
のような配列ループ処理を ActionScript で書くならば、
var test = [ "a","b","c" ]; for (var i=0; i < test.length; i++){ trace(test[i] + " : " + i); } [実行結果] a : 0 b : 1 c : 2
と、for 構文を使って書くとOKです。
for .. in #ActionScript
foreach #Perl
↑を同じ構文/機能だと判断してしまう開発者が陥るワナな訳で。
最初に発見した時は「バグだバグ!」と怒りを感じていた自分ですが、冷静になって考えてみると配列をループ処理するのに for構文 を使うのは至極当たり前なルールなのかもなぁ、と。(それにしたって 配列要素 降順 でループ処理しちゃう仕様はどうなのよ?)
- Newer: 今日の茶豆
- Older: 曇りなき眼を持って - ゲーム業界から学ぶバランス感覚の大切さ
Comments:2
- さいとうなゆた 2007-11-14 (水) 12:53
-
var test = [ "a","b","c" ];
for (var i in test){
trace(test[i] + " : " + i);
}
test.reverse();
こうすればfor inでも大丈夫ですか? - ななし 2008-04-28 (月) 08:55
-
私もさっきscript書いてて変だなーと思ってここみつけました。
w