AS2からAS3に移った時に、クラスが増えたな、という印象がありました。
たとえばURLRequestMethodクラスとかTextFieldAutoSizeクラスとかやたらと値を取得するためのクラスがあります。
はじめはこうなっている意味がわからず、ただただ冗長なコードを鬱陶しく思っていました。

ですがAS2にもどってみて、エラーの見つけにくさやイベント名のばらつき("change"と"onChange"など)を逆に不便に感じてしまい、 特定の値に名前がついていることが開発者にとってとても重要なことに気づきました。

これはリファクタリングでマジックワードに関するテクニックで、固定の文字列や数字コード自体はどういう意図があるのか意味がわからないし書き間違うかもしれないので、値に名前をつけて役割をはっきりさせるということです。

たとえばあるクラスが発行する初期化のイベント名の値が"init"なのか"onInit"なのかは利用者にとってはわかりませんが、 Class.INITなどの変数(または定数)として定義(APIが公開)されていればわかるようになります。
もちろん間違っていればコンパイラの吐くエラーでチェックすることもできるようになります。
パッケージを読み込みコードヒントを出すような優秀なエディタをお使いであればなおさら便利なことでしょう。

また値がどんなオブジェクトに属するかという表現も可能です。

"get","post"だとさまざまな文脈で違う意味になりそうですが、

class URLRequestMethod { public static var GET:String = "get"; public static var POST:String = "post"; } trace( URLRequestMethod.GET );

としておけばどういった文脈で使われるのか意図がはっきりわかります。
なにより何かの理由で値そのものを変更してもコードの大部分は書き直す必要がありません。(そんな変更が起こる状態が問題かもしれませんが)

AS2ではビルトインクラスのAPIでも文字列をそのまま設定するものがすくなくありません。
慣習としてもいちいち神経質に変数なり定数を使う人はあまりいないように思いますが、AS3との違いがわずらわしいのもあり、Event関係を中心にStage関係、TextFormat関係はAS2でも定数クラスを自前で実装してしまっています。

といってもクラスが増える、コードが冗長になることは避けられません。
大量にイベントの定義されたEventクラスなど、使わないかもしれない値を保持するという意味では無駄も多いのかもしれません。
ですが、開発における作業ロスの削減と精神衛生的なメリットは十分にあると思います。

よくあるのはインスタンスのステータスがいくつかありステータスによって変化がある場合。
文字列や数字でタイプを判定することがよくありますが、これだと外からタイプを注入する場合間違う恐れがありますし、 開発中も何度も同じ文字列を書くことになるのがよくありません。

class ASCorder { public var skilLevel :String = "beginner"; // ←1 public function setSkilLevel( levelType:String ) {  skilLevel = levelType;  update(); } public function update() { switch(skilLevel) { case "beginner": // ←2 // break; case "normal": // break; case "expert": // break: case "god"; // break; } } }

タイプの要素だけくくりだして下記のようにするとわかりやすくなります。

class ASCorder { public var skilLevel :String = SkilLevelType.BEGINNER; public function setSkilLevel( levelType:String ) {  skilLevel = levelType;  update(); } public function update() { switch(skilLevel) { case SkilLevelType.BEGINNER: // break; case SkilLevelType.NORMAL: // break; case SkilLevelType.EXPERT: // break: case SkilLevelType.GOD; // break; } } }

// 定数クラス class SkilLevelType { public static var BEGINNER:String = "beginner"; public static var NORMAL:String = "normal"; public static var EXPERT:String = "expert"; public static var GOD:String = "god"; private function SkilLevelType () {} }

また定数クラスはWebサービスのURLとかアプリケーションのメタ情報などの保持にも有用だと思います。

BitmapDataとか物理演算のチューニングのようなテクニックとかも重要ですが、ソフトウエアエンジニアリング的な知識もたまにはいいかなと思ってまとめてみました。

HTML5飯