debug-assert-RequireJS-moduleなるものを作りますた

GitHub - monjudoh/debug-assert-RequireJS-module: RequireJS module for debugging and assertion.
これは何かと言うとRequireJS moduleについて - 文殊堂で説明したRequireJSのmoduleで、
debug支援用のものです。

debug log出力の基本的な使い方

RequireJSのmoduleなので以下のように読み込んでやります。
callbackにdebug関数が渡されてくるのでこいつで適当にdebug printしましょう。

require(['debug'],function(debug){
  debug('hogehoge');
});
define(['debug'],function(debug){
  debug('fugafuga');
});

consoleがない環境で読み込むとdebugは空関数になるので、
console.debug();をべた書きするより安全です。
console.debugがない場合はconsole.logで出力します。

assert機能

サイボウズで学んだこと - IT戦記
id:amachangのこちらのエントリで書かれていたassertionをやるための機能です。
使い方はdebug関数からさらにassert関数が生えているので、
満たしているべき条件や条件判定結果を返す関数を渡しましょう。

require(['debug'],function(debug){
  document.getElementById('button02').onclick=function(){
    var textValue = document.getElementById('text02').value;
    debug(textValue);
    debug.assert(textValue.length < 4);
  }
});

assertに渡した値がfalsyだとdebuggerでbreakされます。

ステップアウトするよう勧められるのでそのとおりにすると…

原因箇所が表示されます。


元ネタと同じくconsoleにはスタックトレースが吐かれます。

debug用callback

debug関数にcallback関数を渡すと、
その第一,第二引数がconsole,assertになるので、
関数内でガシガシdebug用コードを書けます。


debug関数にcallback関数とthisを渡しておけば、
callback関数内外でthisが同じになるので、
プロダクションコードからdebug用コードに
コピペ出来なくて面倒くさいとかもないでしょう。
また、callback関数内で例外が投げられても外には影響ないので、
安心してdebug用コードを書く事ができます。

require(['debug'],function(debug){
  $('div').live('click',function(ev){
  debug(function(console,assert){
    assert($(this).text() == 'hoge');
    console.debug($(this).html());
  },this);
});
});

まとめ?

仕事でガンガン使って育ててこうと思います。
良かったら使ってみたりforkしていじったりしてみてください。