コンパイラ警告メッセージでは、有効なコードを特定して、コンパイルを正常に行うことができますが、意図に反した内容が表示される場合もあります。これらの問題を検出できるようにするには、ActionScript プロジェクトを warning モードでコンパイルします。
警告の中には、"型宣言がありません" など、コーディングスタイルの選択に関するものがあり、有効にするかどうかを選択できます。他には "null に代入できません" など、有効ではあるがユーザーが想定したように動作しない可能性があるステートメントを指摘する警告があります。3 番目のクラスの警告では、ActionScript 2.0 のコードを ActionScript 3.0 に移行する際に発生する可能性のある問題が検出されます。
| | コード | メッセージ | 説明 |
| | 1009 | _ '_' に型宣言がありません。
|
コーディングスタイルの選択肢として、データ型を宣言しないという方法もあります。関数の戻り値の型、パラメータ、または変数に型宣言がありませんが、型宣言を使用すると、コンパイラでコードを効率的に出力でき、コンパイル時のエラー検出の精度も高まります。型宣言の使用を忘れた場合に通知するには、この警告を有効にします。
|
| | 1013 | _ 型の変数は undefined にすることができません。値 undefined は _ に型強制された後で比較されます。
|
* 型の変数のみ undefined にすることができます。ごく一部の例外を除いて、初期化されていない変数のデフォルト値は undefined ではなく null になります。例外として、Boolean 変数のデフォルト値は false、Number 変数のデフォルト値は NaN、int 変数または uint 変数のデフォルト値は 0 になります。
|
| | 1031 | 移行の問題 : new _ の結果は、関数 _ の新しいインスタンスではなく、その関数の戻り値になります。
|
コードの移行に関する警告です。検出されたコードは ActionScript 2.0 と ActionScript 3.0 で動作が異なります。次に例を示します。
function f(){
this.b = 22;
this.a = new Array(2);
this.a[0] = 33;
this.a[1] = 44;
return a;
}
// ActionScript 2.0 では f の新しいインスタンス、ActionScript 3.0 では新しい 2 要素の配列が返されます。
var d = new f(); // ここで警告が発生します。
trace(d.a); // ActionScript 3.0 では undefined、ActionScript 2.0 では [33,44] です。
|
| | 1035 | Boolean() を引数なしで使用します。
|
コードの移行に関する警告です。Boolean() 関数は、ActionScript 3.0 では false を返しますが、ActionScript 2.0 では undefined を返します。
|
| | 1039 | 移行の問題 : Number('') 関数を空のストリング引数で呼び出した場合、ActionScript 3.0 では 0 を返し、ActionScript 2.0 では NaN を返します。
|
コードの移行に関する警告です。Number() メソッドをストリング引数で呼び出すと、ストリング中の空白をすべてスキップし、数字が検出されなかった場合にデフォルト値の 0 を返します。ActionScript 2.0 では、ストリングに空白が含まれる場合に NaN が返されます。
|
| | 1045 | 移行の問題 : Array.toString() による null エレメントと undefined エレメントの処理方法が変わりました。
|
コードの移行に関する警告です。ActionScript 2.0 では、null 配列エレメントは null に変換され、undefined エレメントは undefined に変換されます。ActionScript 3.0 では、null エレメントおよび undefined エレメントは両方とも空のストリング '' に変換されます。配列からの toString() 出力を解析するコードがある場合は、この違いに合わせてコードを調整する必要があります。
|
| | 1059 | 移行の問題 : プロパティ _ はサポートされないようになりました。_。
|
コードの移行に関する警告です。使用しようとしているプロパティは、ActionScript 3.0 には存在しません。
|
| | 1061 | 移行の問題 : メソッド _ はサポートされないようになりました。_。
|
コードの移行に関する警告です。使用しようとしているメソッドは、ActionScript 3.0 には存在しません。
|
| | 1066 | __resolve はサポートされなくなりました。 | |
| | 1067 | 移行の問題 : __resolve はサポートされなくなりました。同様の機能を得るには新しい Proxy クラスを使用してください。
|
コードの移行に関する警告です。__resolve の置き換えに関する詳細については、本リファレンスガイドの Proxy を参照してください。
|
| | 1071 | 移行の問題 : _level はサポートされなくなりました。詳細については、flash.display パッケージを参照してください。
|
コードの移行に関する警告です。使用しようとしているプロパティは、ActionScript 3.0 には存在しません。
|
| | 1073 | 移行の問題 : _ はダイナミッククラスではありません。インスタンスにメンバーを動的に追加することはできません。
|
コードの移行に関する警告です。ActionScript 2.0 では Number などのクラスの多くが動的であるため、実行時にこれらのクラスのインスタンスに新しいプロパティを追加することができます。この警告は、動的でないクラスのインスタンスにプロパティを追加しようとするコードがある場合に表示されます。
|
| | 1083 | 移行の問題 : メソッド _ は this キーワードのスコープの変更により ActionScript 3.0 では異なる動作をします。追加情報については、警告 1083 に関するトピックを参照してください。
|
コードの移行に関する警告です。この警告は、通常コールバック関数として使用されるオブジェクトのメソッドが値として使用された場合に生成されます。ActionScript 2.0 では、関数は呼び出されたコンテキスト内で実行されます。ActionScript 3.0 では、関数は常に定義されたコンテキスト内で実行されます。したがって、変数名およびメソッド名は、コールバックが呼び出されたコンテキストでなく、コールバックが含まれているクラスで解決されます。次に例を示します。
class a
{
var x;
function a() { x = 1; }
function b() { trace(x); }
}
var A:a = new a();
var f:Function = a.b; // ここで警告がトリガされます。
var x = 22;
f(); // ActionScript 3.0 では prints 1、ActionScript 2.0 では 22 です。
|
| | 1085 | _ がデフォルトの名前空間にスコープされます : 内部 _。このパッケージの外部には表示されません。
|
コーディングスタイルの選択肢として、名前空間を宣言しないという方法もあります。名前空間の宣言や定義に対するアクセス指定子の宣言を忘れた場合に通知するには、この警告を有効にします。宣言がない場合、定義はこのファイルの外側のコードから参照できません。このファイルの外側のコードから定義を参照できるようにするには、アクセス指定子 public または名前空間宣言で定義を宣言します。このファイル内でのみ定義を参照し、この警告が表示されないようにするには、定義を private として宣言します。
|
| | 1087 | 移行の問題 : ActionScript 3.0 では、オブジェクトのプロパティを "for x in target" ステートメント内でランダムな順番で繰り返し処理します。
|
コードの移行に関する警告です。ActionScript 2.0 では、オブジェクトのプロパティは常に同じ順序で処理されていました。ActionScript 3.0 では、順序はランダムでコンピュータごとに異なる可能性があります。予期しない順序で動作した場合は、このループを調べて、動作順序の変更がコードに影響するかどうかを確認してください。
|
| | 1089 | エラーコード : _。
|
ソースファイルが破損しているか、コンパイラのコードにバグがあることが原因です。アドビ システムズ社までバグを報告してください。
|
| | 1091 | 移行の問題 : _
|
コードの移行に関する警告です。ActionScript 2.0 では、onMouseDown などの特別な名前でメソッドを宣言すると、Flash は特定のイベントが発生したときにそのメソッドを呼び出します。ActionScript 3.0 では、このイベントをメソッドで受け取るように登録するには、メソッドと addEventListener() を呼び出す必要があります。詳細については、本リファレンスガイドの「addEventListener」を参照してください。
|
| | 1093 | uint 値 (正の値) が必要なところに負の値が使用されました。
|
uint データ型に負の値を割り当てると、非常に大きい正の値となります。 var x:uint = -1; trace(x); // 4294967295。
|
| | 1097 | null の比較が無効です。_ 型の変数は null にすることができません。
|
Boolean、int、uint、および Number のインスタンスを null にすることはできません。比較演算子は、Boolean と比較する場合は null を false に変換し、Number、int、または uint データ型と比較する場合は 0 に変換します。
|
| | 1099 | NaN の比較が無効です。このステートメントは、常に false と評価します。
|
NaN は固有の数学プロパティを持つため、これを含む比較の評価結果はすべて false となります。代わりに、グローバルな isNaN() 関数を使用して NaN 値を検出します。次に例を示します。
trace(NaN == NaN); // false です。
trace(NaN != NaN); // この場合も false です。
trace(isNaN(NaN)); // true です。
|
| | 1101 | 条件内の割り当てです。= ではなく == をですか?
|
割り当てステートメント = の結果は、= ステートメントの右側の値です。割り当てステートメントを条件として使用することはできますが、推奨されません。通常は、等価テスト == を入力しようとして間違えたことが原因です。次に例を示します。
var x:Boolean = false;
var y:Boolean = true;
// 次の行では、x の値を意図的に y の値にしているのか、それとも入力ミスなのかを判断するのは困難です。
if (x = y) { trace("x is assigned y's value of true, making the conditional test evaluate as true."); }
|
| | 1103 | 値 _ が必要ですが、null が使用されています。
|
Boolean、Number、int、および uint 変数に null を値として割り当てることはできません。null 値は、Boolean に割り当てる場合は false に、int、uint、または Number に割り当てる場合は 0 に暗黙的にキャストされます。
|
| | 1105 | コンストラクタ関数がクラス _ に指定されていません。
|
コーディングスタイルの選択肢として、コンストラクタ関数を宣言しないという方法もあります。クラスに対してコンストラクタを常に宣言する場合は、この警告を有効にします。この警告は、クラス名が変更されていて、コンストラクタ名が変更されていない状況の検出を目的としています。警告を有効にしない場合は、このような状況に対してフラグは設定されず、以前のコンストラクタは通常の関数のように表示されます。
|
| | 1111 | 定数は初期化されませんでした。 | |
| | 1113 | Array(x) は new Array(x) と同じように動作します。Array 型に値をキャストして、Array(x) の代わりに式 x を Array として使用します。 | |
| | 1115 | super() ステートメントは、このコンストラクタを入力する前に実行されます。実行時に明示的に制御する場合は、コンストラクタ内で super() への呼び出しを追加します。
|
コーディングスタイルの選択肢として、コンストラクタ内に super() への呼び出しを追加する方法もあります。super() を常に特定の時点で呼び出す場合は、この警告を有効にします。これにより、ローカルの初期化コードの後で super() を呼び出す場合に、呼び出しの追加を忘れるのを防ぐことができます。
|
| | 3552 | TextField に += を使用してテキストを追加すると、TextField.appendText() メソッドを使用するよりも何倍も遅くなります。
|
この重要なテキスト最適化の詳細については、本リファレンスガイドの TextField クラスの appendText() メソッドを参照してください。
|
| | 3554 | _ 型が必要な箇所で関数値が使用されています。この関数参照の後に括弧 () がない可能性があります。
|
ActionScript では関数を値として使用できます。問題のコードでは、Function、Object、* 以外の型が必要な箇所で Function 型の値を使用しています。通常は、関数名の後の括弧 () が抜けていることが原因です。
|
| | 3556 | instanceof 演算子は使用されなくなりました。代わりに is 演算子を使用してください。 | |
| | 3574 | 移行の問題 : ActionScript 2.0 XML クラスの名前は XMLDocument になりました。
|
コードの移行に関する警告です。ActionScript 3.0 では、XML は ActionScript 2.0 と異なるクラスになりました。ActionScript 3.0 では、XMLDocument クラスが ActionScript 2.0 の XML クラスに相当します。ActionScript 3.0 の XML クラスでは、より簡単で強力な API によって機能が改善されました。詳細については、ActionScript リファレンスガイドの XML を参照してください。
|
| | 3576 | Date(x) は new Date().toString() と同じように動作します。Date 型に値をキャストして、Date(x) の代わりに "x as Date" を使用します。 | |
| | 3582 | 現在のクラスと同じ名前でパッケージをインポートすると、このスコープ内のクラス識別子が非表示になります。 | |
| | 3584 | '_' という名前の引数を複数指定しました。この引数への参照では、最後の引数が常に参照されます。 | |
| | 3590 | ブール値が必要ですが、非ブール値が使用されています。 | |
| | 3591 | ブール値が必要ですが、_ が使用されています。ブール式に型強制されます。 | |
| | 3593 | _ は dynamic クラス _ の認識されたプロパティではありません。
|
strict モードのコンパイルでは、動的なクラスのインスタンスについて未定義のプロパティをチェックしません。Date、RegExp、Error 型は、ECMAScript と後方互換性を維持するために動的なクラスとなっています。この警告は、これらのクラスのインスタンスで未定義のプロパティが使用されていることを示します。この場合は、Date 値に存在しない year プロパティを取得または設定しようとすると問題が起こります。正しいプロパティ名は fullYear です。
|
| | 3595 | _ は dynamic クラス _ の認識されたメソッドではありません。
|
strict モードのコンパイルでは、動的なクラスのインスタンスについて未定義のメソッドをチェックしません。Date、RegExp、Error 型は、ECMAScript と後方互換性を維持するために動的なクラスとなっています。この警告は、これらのクラスのインスタンスで未定義のメソッドが使用されていることを示します。
|
| | 3597 | 変数の定義が重複しています。
|
コンパイラで、変数の重複した定義が検出されました。予期しない結果が発生する可能性があります。ActionScript では、変数のブロックレベルのスコープはサポートされていません。関数本体で定義されている変数はすべて同じスコープ内に存在します。これは、変数が if ステートメント、while ステートメント、for ステートメントなどで定義されている場合も同様です。たとえば、次のコードでは変数 x を 2 回宣言しています。
function test() {
var x:Number = 10;
if (true) {
for (var x=0; x < 5; x++) // ここで警告が発生します。この行に 2 回目の x の定義があります。
trace(x);
}
trace(x); // 10 ではなく 5 です。上の for ループで最後に設定される値が x の現在の値になります。
}
|
| | 3598 | 定義名はインポートされたパッケージ名と同じです。その名前への無修飾の参照は、定義ではなくパッケージが対象となります。 | |
| | 3599 | 定義名はインポートされたパッケージ名と同じです。その名前への無修飾の参照は、定義ではなくパッケージが対象となります。
|
定義の名前がスコープ内のパッケージと同じ場合、その名前への無修飾の参照は定義ではなくパッケージが対象となります。この場合は、変数の参照時に予期しないエラーが発生することがあります。定義への参照は、パッケージではなく定義を対象とするよう、修飾名で指定する必要があります。
|
| | 3600 | 固定プロパティを削除しようとしている可能性があります。 | |
| | 3601 | 宣言されたプロパティ _ を削除できません。関連付けられたメモリを解放するには、値を null に設定します。
| Delete は、動的に定義されたプロパティをオブジェクトから削除します。クラスの宣言されたプロパティを削除できません。操作は警告なしに失敗します。この変数に関連付けられたメモリを解放するには、値を null に設定します。 |