Enumerable.each() - why?

16 views
Skip to first unread message

greenie2600

unread,
Jun 30, 2008, 8:10:51 PM6/30/08
to Ruby on Rails: Spinoffs
I often see people using fancy library methods, like Prototype's
Enumerable.each(), to
loop over arrays.

What's the point of this? Why not just do a standard for loop, like
so:

for ( var i = 0; i < myArray.length; i++ ) {
// ...
}

It seems like it'd be faster, since it's working closer to the bare
metal. Am I wrong about this, or is there some other nuance I'm
missing?

Ryan Gahl

unread,
Jun 30, 2008, 8:27:26 PM6/30/08
to rubyonrail...@googlegroups.com
In some cases, yes, it's pure sugar.

In some cases, yes, you may notice a speed difference. But only if you're looping through a megaton of items and doing a supermegaton of processing.

In most case, it's effect on performance is not worth mentioning.

The main point of it, though, is it's a nice clean way to iterate a collection AND have a new local scope for each iteration of the loop. The closure provided by .each(fn(item, index)) comes in very handy in many cases.

Plus:

for (var i = 0; i < blah.length; i++) {
var item = blah[i];
doSomething(item);
}

is more verbose than:

blah.each(doSomething);

And finally, you're right that .each is one of the lesser value-add methods in Enumerable. Certainly .invoke, .collect, etc... are doing more work. But personally I like the "predicate and delegate" patterns - also prevalent in C# and Java (via Generics) - that Enumerable provides with it methods, including each.

I've been bitten several times with a for loop that didn't quite work as expected because I, or someone, forgot about the absence of block level scoping in javascript.
--
Ryan Gahl
Manager, Senior Software Engineer
Nth Penguin, LLC
http://www.nthpenguin.com
--
WebWidgetry.com / MashupStudio.com
Future Home of the World's First Complete Web Platform
--
Inquire: 1-920-574-2218
Blog: http://www.someElement.com
LinkedIn Profile: http://www.linkedin.com/in/ryangahl

greenie2600

unread,
Jun 30, 2008, 8:33:08 PM6/30/08
to Ruby on Rails: Spinoffs
Ah. The bit about creating a clean scope for each iteration makes
sense. I've been simulating that by resetting my "block-level"
variables to null at the top of the loop.

Thanks! I'll keep this in mind.
> Nth Penguin, LLChttp://www.nthpenguin.com

Frederick Polgardy

unread,
Jun 30, 2008, 9:33:56 PM6/30/08
to rubyonrail...@googlegroups.com
I don't know if I could ever go back to programming in a language without closures anymore. :-)  That used to bite me so many times in JS, mindlessly assuming that a block has a closure.

-Fred


On Mon, Jun 30, 2008 at 7:33 PM, greenie2600 <green...@yahoo.com> wrote:

Ah. The bit about creating a clean scope for each iteration makes
sense. I've been simulating that by resetting my "block-level"
variables to null at the top of the loop.

Thanks! I'll keep this in mind.

--
Science answers questions; philosophy questions answers.
Reply all
Reply to author
Forward
0 new messages