サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

forの初期設定式に対する型指定の問題

ID: FN0410001 Product: Flash

Platform: All
Version: MX 2004

問題
forステートメントの初期設定の式に厳密な型指定を行ったとき、いくつかの問題が生じます。

スクリプト001■forステートメントの初期設定の式に厳密な型指定

for (var i:Number = 0; i<5; i++) {  // 変数iをNumber型で指定
}

変数iをNumber型で指定

[1] [自動フォーマット]を実行すると、型指定が消滅します。

図001■[自動フォーマット]で型指定が消滅

変数iのNumber型指定が消滅

[2] 指定した型チェックが、行われません。

以下のようにString型で指定した変数iに数値を代入しても、[シンタックスチェック]や[パブリッシュ]時にエラーが発生しません。

スクリプト002■指定した型と異なるデータを代入

for (var i:String = 0; i<5; i++) {  // String型で指定した変数iに数値を代入
}

String型で指定た変数iに数値を代入してもエラーは発生しない

原因
明らかに、バグと考えられます。

型指定が消滅する問題は、名前のない関数の戻り値についても確認されています。

スクリプト003■名前のない関数の戻り値に型指定

var myFunc:Function = function ():Number {
   return 1;
};

[自動フォーマット]で型指定が消滅する

型指定をしてもそのチェックが行われないという問題は、厳密な型指定そのものに対する信頼を損なう点で重大でしょう。

対処法
forステートメントの外で変数宣言および型指定をするのが、当面確実な方法です。そうすれば、[自動フォーマット]を実行しても型指定は消滅せず、[シンタックスチェック]または[パブリッシュ]時に型チェックが行われます。

スクリプト004■forステートメントの外で変数を宣言

var i:Number;  // forステートメントの外で変数とその型を宣言
for (i=0; i<5; i++) {
}

[自動フォーマット]や[シンタックスチェック]、[パブリッシュ]が正しく実行できる

_____

作成者: 野中文雄
作成日: 2004年10月9日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.