www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Trailing commas in constructor arguments?

reply "Gary Willoughby" <dev nomad.so> writes:
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
parent "monarch_dodra" <monarchdodra gmail.com> writes:
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