A suggestion on keyword for_each

Tyler Jameson Little beatgammit at gmail.com
Fri Aug 9 07:51:01 PDT 2013


On Friday, 9 August 2013 at 03:30:16 UTC, SteveGuo wrote:
> I suggest that change keyword *for_each* to *for* since *for* 
> is clear enough and
> less letters, like C++11 does.

Decent suggestion, but I don't think Walter, Andrei or any of the 
committers want to break everyone's code just to shorten some 
syntax.

As a proposal, however, it's not bad, and like you say it exists 
in other languages:

     // Go
     for key, val := range x {} // where x is an array, slice or 
map
     // Java
     for (int x in y) {}
     // C++11
     for (int &x : y) {}
     // Python (or use iter(), range(), xrange(), etc)
     for x in y: pass

Which are similar to D's foreach:

     foreach (key, value; x) {} // where x is a suitable range

I agree that the following would be unambiguous (whichever syntax 
we decide is better):

     for (key, value; x) {}
     for (key, value : x) {}

But it doesn't offer enough benefit to make a breaking change or 
introduce redundant syntax. Saving 4 chararters isn't enough 
justification.

Also, I don't particularly like for_reverse, since you can't use 
a traditional for-loop syntax with for_reverse:

     // would be syntax error
     for_reverse (i = 0; i < 5; i++) {}
     // but this works just fine
     foreach_reverse(i; 0 .. 5);

And D doesn't stand alone in the 'foreach' arena:

     // C#
     foreach(int x in y) {}
     // Perl
     foreach (@arr) {
         print $_;
     }
     // PHP
     foreach($set as $value) {}
     foreach ($set as $key => $value) {}
     // Scala
     some_items foreach println

I don't really see a compelling reason to switch. Then again, 
this is only my opinion, so I can't speak for the community.


More information about the Digitalmars-d mailing list