On Tue, Oct 20, 2009 at 20:09, Michael Van Canneyt <mich...@freepascal.org> wrote: > But I really don't see the advantage of being able to type > > For F in Someclass.Iterator do > F.Something > > over > > While SomeClass.HaveValue do > SomeClasss.NextValue.Something; > > It's not clearer, at most it saves you a couple of keystrokes.
This is because the while you provided is not equivalent to the for loop above. The correct translation would be: var it: TSomethingIterator; ... it := SomeClass.Iterator; try while it.HaveValue do it.NextValue.Something; finally it.Free; end; Now, that is quite e few keystrokes to save, not to mention that if item value is used more than once in the loop, SomeClass.NextValue must be stored in a variable, further bloating code. > Borland - in its desire to make money - implemented every idiots' request, > that we should do the same. Well, I have the same attitude regarding sealed classes ;-) However, for..in is not like those. Let me provide a few over-generalized statements in support of for..in feature. 1) Convenient syntax matters -- otherwise we would be programming in C 2) Language level matters -- otherwise we would be programming in assembler language 3) for..in is both a convenient syntax and a very important high-level feature. It is actually more fundamental and important than for..to loop, and it is only a matter of weak compiler implementations that for..to loop was introduced first. -- Alexander S. Klenin _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel