May 04, 2014 Trailing commas in constructor arguments? | ||||
---|---|---|---|---|
| ||||
In the following snippet is the line marked WOAH legal? The compiler doesn't complain about the trailing comma in the constructor arguments. import std.stdio; class Foo { public this(string foo) { } } void main(string[] args) { auto foo = new Foo("bar", ); // <-- WOAH } |
May 04, 2014 Re: Trailing commas in constructor arguments? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Gary Willoughby | On Sunday, 4 May 2014 at 10:04:26 UTC, Gary Willoughby wrote:
> In the following snippet is the line marked WOAH legal? The compiler doesn't complain about the trailing comma in the constructor arguments.
>
> import std.stdio;
>
> class Foo
> {
> public this(string foo)
> {
> }
> }
>
> void main(string[] args)
> {
> auto foo = new Foo("bar", ); // <-- WOAH
> }
Yes. As a rule of thumb, a single trailing comma is *always* legal. It allows for easier and uniform syntax for calls with lots of arguments:
new Foo(
"bar1",
"bar2",
"bar3",
"bar4",
);
This works for mostly anything: both calls and function declaration:
this(
string arg1,
string arg2,
string arg3,
string arg4,
)
{
...
}
It also works for arrays:
auto arr1= [
1,
2,
3,
4,
];
Or enums:
enum Letters
{
A,
B,
C,
D,
}
The advantage in all the above means no special case if you want to add, swap or comment a certain argument: They are all "equal" in terms of separator comma.
Finally, it makes mixins/generated code easier, since you don't have to worry about the "last argument" special case (though if you use "range formating": "%(%s,%)", it shouldn't matter).
--------
So long story short, yes, it is legal. And convenient. I've personally adopted it, and use it any time I list arguments vertically.
|
Copyright © 1999-2021 by the D Language Foundation