ActionScriptの日本語メッセージを解読してみよう

ActionScriptのコンパイル時やランタイムの日本語のエラーメッセージはなかなかどうして手ごわくて、暗号なんじゃないかと思えてくる時があります。

正しく解釈できるようになるには経験値が必要ですが、全てのエンジニアがその経験をすぐに積めるわけではないですし、試行錯誤を繰り返してこそ経験値が増えるのに、その試行錯誤の副産物であるエラーメッセージの解釈に経験値が必要だなんて、鶏が先か卵が先か。しかも分かり辛いエラーほど、そのエラーの文言とはまったく無関係の初歩的なケアレスミスによって発生するものが多いのです。

この記事には、そんな、ActionScriptのコンパイルエラーを解読…ではなく解釈するための経験値の素を継続的に追加していきます。

まず最初に、これから特定のメッセージが発生した際のいくつかの考えられる原因を説明しますが、そのメッセージの原因が必ずここに説明してあるものであるとは限らないので、注意してください。同じメッセージで複数の原因がある場合があるので、ここに説明してあるものは、あくまでそれらのうちの一つとして参考にしてください。

rightparenがcolonの前に必要です。

右括弧がコロンの前に必要です、と言っているわけですが、そんなことない時でも出ます。

関数の定義の際にfunctionのキーワードを書き忘れた場合。直前までJavaでコーディングをしていると、よく出会います。

誤: private isOk(strTest:String):Boolean {
正: private function isOk(strTest:String):Boolean {


ActionScript ファイルには外部から表示可能な複数の定義は使用できません

定義を使用できません、って何か使用しているつもりはないのだけど…と混乱しがちなメッセージです。

これは、クラス変数を定義するつもりが、public class….で始まるクラス定義の外に変数の定義文を書いてしまうとこれが出ます。もちろん、賢いIDEを使っていればこのようなことは起きません。


private 属性はクラスプロパティの定義でのみ使用できます。

または、「protected 属性はクラスプロパティの定義でのみ使用できます。」

「そうですよね」と答えたくなるメッセージですが、このエラーがある日突然起き始めることがあります。それまでは大丈夫だったのに。

これは、にょろ括弧{}の不一致です。このエラーが起きた場所から遡って行って、{}を含むfunction定義を見つけて、目を皿のようにして{}を見ましょう。多分if文やループ文など、どこかのブロックが閉じていないか、もしくは余計な}があるか、というところです。


1113 Array(x) は新しい Array(x) と同様に動作します。Array 型に値をキャストするには、Array(x) ではなく式 x を Array として使用します。

「式xをArrayとして使用」って、もう、文章が完全に崩壊しています。某アインシュタインの伝記の翻訳本ぐらい支離滅裂です。

この文章は、「Array(x)と書くとnew Array(x)という意味になっちゃうよ」と注意してくれているのです。さらに、「キャストしたければArray(x)ではなく、(x as Array)を使いましょう」(Arrayのキャストにはas演算子を使う)と正しい方法を教えてくれているのです。親切にもメッセージが正しい方法を教えてくれる稀有なケースであるにも関わらず、残念な翻訳でもったいないことになっていますね。


まだまだある?!

この記事は、正しい解釈が必要なメッセージに遭遇したら今後も引き続き更新します。