コードヒントとエラーチェックに関する他の回答のポイントは正確ですが、パフォーマンスに関する主張に対処したいと思います. それは実際にはそれほど真実ではありません。理論的には、厳密な型を使用すると、コンパイラはネイティブに近いコードを生成できます。ただし、現在の VM では、そのような最適化は行われません。ところどころで、AS3 コンパイラは浮動小数点命令ではなく整数命令を使用します。そうしないと、型インジケーターは実行時にあまり効果がありません。
たとえば、次のコードを考えてみましょう。
function hello():String {
return "Hello";
}
var s:String = hello() + ' world';
trace(s);
その結果として得られる AVM2 オペコードは次のとおりです。
getlocal_0
pushscope
getlocal_0
getlocal_0
callproperty 4 0 ; call hello()
pushstring 12 ; push ' world' onto stack
add ; concatenate the two
initproperty 5 ; save it to var s
findpropstrict 7 ; look up trace
getlocal_0 ; push this onto stack
getproperty 5 ; look up var s
callpropvoid 7 1 ; call trace
returnvoid
ここで、タイプ インジケーターを削除すると、次のようになります。
getlocal_0
pushscope
getlocal_0
getlocal_0
callproperty 3 0
pushstring 11
add
initproperty 4
findpropstrict 6
getlocal_0
getproperty 4
callpropvoid 6 1
returnvoid
'String' が定数テーブルに表示されなくなったため、すべての名前インデックスが 1 つ少ないことを除いて、まったく同じです。
私は、人々が強い型付けを採用するのを思いとどまらせようとしているわけではありません。パフォーマンスの面で奇跡を期待するべきではありません。
編集:誰かが興味を持っている場合に備えて、AS3 バイトコード逆アセンブラーをオンラインにしました:
http://flaczki.net46.net/codedump/
オペランドを逆参照するように改善しました。