In thinking about blocks, I’ve always wondered why the
thingers.each { |thing|
example is actually interesting (since there’s another, built-in way to do it). In most modern languages there’s a way to iterate through a collection and apply some inline code to it. But then I thought that maybe the for (Thing thing : things) { syntax is really a type of block, even in languages like Java-sans-Groovy where there are none.
So the question is: Is a for-each loop a type of block, albeit with a fixed syntax?
Edit: This question is confusing but yet got some attention so I can’t delete it. Anyway… by Blocks I mean “closures” and not just code blocks. As far as why I tagged this as language agnostic is that I’m not interested in how a for-each is implemented under-the-hood. I’m more interested in whether, from a programmer’s perspective, a for-each could be considered a freebie closure in languages that doesn’t have them, like Java.
This is most definitely not language agnostic (as it is tagged).
For example, in Ruby, you are passing a closure or block to the .each method. The semantics are defined by the language.
In C#, foreach compiles to a call to IEnumerable.GetEnumerator and the use of the IEnumerator.MoveNext method. It just depends on the language.
EDIT:
No, you are thinking only of one use case for a closure. You can’t pass a control structure to a method as you can a closure in some languages. A control structure is not a first class first class data type like a closure is in some languages. In the case of “run this code on each object in a collection” yes, they are semantically similar. However, that it only one example of what you can do with a closure.
You say that you w