shorter foreach syntax - C++0x range-based for
Jonathan M Davis
jmdavisProg at gmx.com
Mon Nov 1 09:07:29 PDT 2010
On Monday, November 01, 2010 06:16:47 Nick Treleaven wrote:
> There's a C++0x proposal for a range-based 'for' statement:
> http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
>
> The upcoming GCC 4.6 C++ compiler changes list support for this:
> http://gcc.gnu.org/gcc-4.6/changes.html
>
> I think the syntax could be useful for D to shorten and improve on the
> status quo a little. Here's the C++ example:
>
> int array[5] = { 1, 2, 3, 4, 5 };
> for (int& x : array)
> x *= 2;
>
> Currently D has:
>
> int array[5] = [1, 2, 3, 4, 5];
> foreach (ref x; array)
> x *= 2;
>
> I think this is better:
>
> for (ref x : array)
> x *= 2;
>
> Apart from being 4 chars shorter, I think it looks more natural using the
> ':' instead of ';'. A lesser benefit is it allows reuse of the 'for'
> keyword, making the 'foreach' keyword unnecessary.
>
> Maybe this would be acceptable for D?
The current syntax has been around for quite a while, it's in TDPL, and making
the change gives no significant improvement. Generally speaking, we're not really
supposed to be making any major changes from what TDPL says without a really
good reason. Saving a few characters is not a really good reason. foreach works
just fine and is arguably clearer, since you know right away that you're dealing
with a foreach loop rather than a for loop - and while similar, they _are_
semantically different. And I don't see why : would be better than ;. IIRC, Java
uses one and C# uses the other and you have to remember which uses which when
moving between the two. And if you're looking to save typing, ; has the
advantage that you don't have to use the shift key.
If D had chosen to just reuse for, that would have been fine, but it didn't, and
I think that it's fine as it is. Changing foreach to for would not be a
productive change in the least.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list