From: Robert Klemme Date: 2007-11-13T19:25:15+09:00 Subject: Re: Yielding an object and caring about the result: the cousin of Object#tap 2007/11/13, furtive.clown@gmail.com : > On Nov 13, 3:12 am, Robert Klemme wrote: > > > > IMHO introducing temporary variables with proper names can go a long > > way to make this piece much more readable. (The same holds true for > > method names.) > > OK, point taken about the proper name. Nonetheless I am surprised > this is not a unanimous slam dunk. The contenders are: > > all_inputs = source_files + > transform1( stems.map { |f| f + "." + guess_extension(f) } ) > all_files = transform2( all_inputs ).map {|f| File.join dir, f} > > verses > > all_files = stems.map { |f| > f + "." + guess_extension(f) > }.as { |all_inputs| > transform2(source_files + transform1(all_inputs)) > }.map { |f| > File.join dir, f > } > > Since I have been accustomed to using #as for years, the latter looks > canonical and the former looks quirky and too clever. Three things > come to mind: > > (1) Parentheses adjacent to brackets are an eyesore. I don't subscribe to that. It depends on the individual case. > (2) The latter is step-by-step linear and easier to follow: one > transformation, then another, then another. Simple. The former takes > much more studying in order to understand, relatively speaking. That > is, my strategy for understanding it is to work from the inmost > expression outward. But in the latter case, I work linearly from > start to finish. As I said, preferences differ. Since you are used to working this way it's easy for you. For me it took quite a bit of time until I understood the logic. > (3) What is the purpose of all_inputs? Is it there as an > intermediate, or do you want to use it for something else? Should I > keep a mental note of it, or should I discard it in my mind? In the > former case, I am left wondering all of this. In the latter case the > answer is clear: it's a temporary for building all_files, to be > forgotten as soon as possible. It never occurred to me that this could be a problem. If you have too many temporary variables in a method the method is probably too long or complex anyway. > I am a lone rubyist who went off the grid several years ago after > contributing a project on rubyforge, so perhaps *my* style is the > quirky one. Still, in my mind the latter is sheer elegance compared > to the former. I actually find it interesting that someone could > possibly disagree. Do (1)-(3) make any sense, then? Partly but I'd rather hear other voices as well. Btw, what is all this transforming doing? Can you give a short description of what this piece of code is supposed to do? As far as I can see you have inputs source_files and stems and get a single list of filenames out of this. Can you give some more hints about the semantics? Kind regards robert -- use.inject do |as, often| as.you_can - without end