デバッグを工夫する(trace関数を拡張)
強引な方法でデバッグを若干便利にする方法です。
AS2のtraceは引数がひとつだけなのでこれをリストで入力できたら素敵だと思いやってみたのですが、強引だとは思いつつ、結構便利に使えてしまいます。
その方法はtraceを拡張することです。
あまり意識しないのですがtraceも立派な関数(Function)です。
ということはオーバーライドや拡張が可能ということです。
関数本体のオーバーライドはさすがに危険なのでさけて、プロパティを増やして拡張するやりかたを紹介します。
FunctionにもObjectの一種なので
trace.debug = function (){}
といった強引な拡張が可能です。
ここで引数を変更したtraceのラップ関数をタイムラインのはじめに作成します。
trace.debug = function() { var _args:Array = arguments; var _messages:Array = []; // 引数の集計 for( var i=0, l=_args.length; i<l; ++i ){ var _arg = _args[ i ]; _messages.push( _arg ); } // 実際のトレース for( var i=0, l=_messages.length; i<l; ++i ){ trace( _messages[ i ] ); } }
とすることで以下のような引数でデバッグ可能になります。
var msg1:String = "はじめのトレース"; var msg2:String = "つぎのトレース"; var msg3:String = "さいごのトレース"; trace.debug( msg1, msg2, msg3 );
これは最初の定義をしてないと何もトレースしないという不便さを抱えています。 ただグローバル関数なので定義してなくてもエラーをはかないという都合よさもあります。
邪道(?)というのをふまえて、個人的に使う分には結構よいのではないでしょうか。
いちいちストリングで連結したり、擬似的に複数のメッセージを配列に突っ込んだりする必要はありません。
これだけでなく、さらに拡張してObjectのダンプまでできるようにするとちょっとしたら本当に便利です。
デバッグ環境は作業効率に大きくかかわるので、開発のレベルに応じて工夫していきたいですね