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