Re: cascade operator or nearest equivalent

2013-10-07 Thread Daniel Davidson

On Thursday, 12 September 2013 at 19:41:49 UTC, bearophile wrote:

Daniel Davidson:

I am using Dart for code generation but would like to consider 
D if I can find a convenient replacement for the following 
declarative style:


Replacing Dart with D seems quite strange, such two languages 
have so much different usage niches.




   var dateRange = struct('date_range')
 ..doc = 'Basic pair of start and end dates'
 ..unitTest = true
 ..publicSection = true
 ..members = [
   member('start_date')
   ..type = 'Date',
   member('end_date')
   ..type = 'Date',
 ];


A similar syntax is not allowed in D, but there are two things 
that help for this: the C-style initialization of structs, that 
support field names too, and the with(){} statement.


Bye,
bearophile


The problem with with is the name can not hide each other, so it 
is easy to get into trouble. With C-style initialization I don't 
think you can use as expression - I think you need an lvalue for 
each and this hurts nesting.


I have a style I'm playing with and if anyone has comments or 
improvements (i.e. make more succinct/readable) it would be 
appreciated.


Here is a sample and the source for this and comparable Dart are 
in the links.


auto d = make((ref Dossier _) {
  _.family = [
   father : make((ref Person _) {
   _.birthDate = 2001/1/1;
   _.deathDate = 2101/1/1;
   _.retirementDate = 2100/1/1; }),
   mother : make((ref Person _) {
   _.birthDate = 2005/1/1;
   _.deathDate = 2125/1/1;
   _.retirementDate = 2100/1/1; }),
   ];
  _.assets = [
   house : make((ref Asset _) {
   _.name = Home on the Hill;
   _.unitValue = 120_000; }),
   car : make((ref Asset _) {
   _.name = Dodge Dart;
   _.unitValue = 500; })
  ];
});

http://pastebin.com/iLVL20Bz
http://pastebin.com/mLcWDACm

Thanks
Dan


Re: cascade operator or nearest equivalent

2013-09-12 Thread bearophile

Daniel Davidson:

I am using Dart for code generation but would like to consider 
D if I can find a convenient replacement for the following 
declarative style:


Replacing Dart with D seems quite strange, such two languages 
have so much different usage niches.




var dateRange = struct('date_range')
  ..doc = 'Basic pair of start and end dates'
  ..unitTest = true
  ..publicSection = true
  ..members = [
member('start_date')
..type = 'Date',
member('end_date')
..type = 'Date',
  ];


A similar syntax is not allowed in D, but there are two things 
that help for this: the C-style initialization of structs, that 
support field names too, and the with(){} statement.


Bye,
bearophile