A possible suggestion for the Foreach loop
Dylan Knutson
tcdknutson at gmail.com
Tue Aug 20 19:46:00 PDT 2013
Hello,
I'd like to open up discussion regarding allowing foreach loops
which iterate over a tuple of types to exist outside of function
bodies. I think this would allow for templating constants and
unittests easier. Take, for instance, this hypothetical example:
----------------------------------------------------------------------
T foo(T)(ref T thing)
{
thing++; return thing * 2;
}
foreach(Type; TupleType!(int, long, uint))
{
unittest
{
Type tmp = 5;
assert(foo(tmp) == 12);
}
unittest
{
Type tmp = 0;
foo(tmp);
assert(tmp == 1);
}
}
----------------------------------------------------------------------
Without the ability to wrap all of the unittests in a template,
one would have to wrap the bodies of each unittest in an
individual foreach loop. This is not only repetitive and tedious,
but error prone, as changing the types tested then requires the
programmer to change *every* instance of the foreach(Type;
TupleType).
A similar pattern already exists in Phobos, for testing all
variants of strings (string, dstring, and wstring) and char
types, as eco brought to my attention. After taking a look at
some of the unittests that employ this pattern, I'm certain that
code clarity and unittest quality could be improved by simply
wrapping all of the individual unittests themselves in a foreach
as described above.
Now, I'm certainly no D expert, but I can't think of any
breakages this change might impose on the language itself. So,
I'd like to hear what the benevolent overlords and community
think of the idea.
More information about the Digitalmars-d
mailing list