One of the things that I like about C/C++ is compile time macros. What they mean is that if I have debug print statements, not only will they be compiled out, but also the expressions passed to the printing statement will not be evaluated.
I have code like this in javascript:
Even if logging is false, the expression xml.toString() will be evaluated, which can be quite costly in a production setup (I'm talking about node.js and not on a browser).
The way I've solved this is by making sure that my log() function can accept functions as well. Hence, code such as this becomes possible:
The log() function needs to be patched to look like this:
This essentially means that you've gotten rid of the runtime cost of calling xml.toString() when logging is disabled.
I have code like this in javascript:
var logging = false; function log() { if (logging) console.log.apply(console, arguments); } var xml = an_xml_stanza(); log("XML Stanza:", xml.toString());
Even if logging is false, the expression xml.toString() will be evaluated, which can be quite costly in a production setup (I'm talking about node.js and not on a browser).
The way I've solved this is by making sure that my log() function can accept functions as well. Hence, code such as this becomes possible:
var xml = an_xml_stanza(); log(function() { return ["XML Stanza:", xml.toString()]; });
The log() function needs to be patched to look like this:
log = function() { if (!logging) return; if (arguments.length == 1 && typeof arguments[0] == "function") arguments = arguments[0](); console.log.apply(console, arguments); }
This essentially means that you've gotten rid of the runtime cost of calling xml.toString() when logging is disabled.