I’m rephrasing this question because it was either too uninteresting or too incomprehensible. 🙂
The original question came about because I’m making the transation from Java to Groovy, but the example could apply equally when transitioning to any of the higher-level languages (Ruby, Python, Groovy).
Java is easy to debug because there is a clear relationship between lines of code, and fairly fine-grained behaviour, e.g. manipulate an array using a for loop:
for ( int i=0; i < array1.size(); i++ )
{
if ( meetsSomeCriterion(array1.elementAt(i) )
{
array2.add( array1.elementAt(i) );
}
}
so you can set a breakpoint on the test in the loop and see what happens next. (I know there are better ways to write this; it’s just to illustrate the point.)
In languages like Ruby the idiomatic style seems to favour higher-level one-liner coding, e.g. from http://rubyquiz.com/quiz113.html
quiz.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
I’m wondering if you can suggest any effective techniques for debugging this, for example if you changed the regular expression … would you still use the traditional debugger, and step into/over the chained methods? Or is there a better way?
Thanks!
If I were to debug your example, the first thing I would do is break it down into multiple steps. I don’t care if it’s “pythonic” or “the ruby way” or “tclish” or whatever, code like that can be difficult to debug.
That’s not to say I don’t write code like that. Once it’s been debugged it is sometimes OK to join it all into a single line but I find myself leaning more toward readability and maintainability and less toward writing concise code. If the one-liner approach is genuinely more readable I’ll go with it, but if it’s not, I don’t.