digitalmars.D.learn - Trailing commas in constructor arguments?
- Gary Willoughby (14/14) May 04 2014 In the following snippet is the line marked WOAH legal? The
- monarch_dodra (46/60) May 04 2014 Yes. As a rule of thumb, a single trailing comma is *always*
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
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.
May 04 2014