Interesting Research Paper on Constructors in OO Languages
Regan Heath
regan at netmail.co.nz
Wed Jul 17 02:06:27 PDT 2013
On Tue, 16 Jul 2013 18:54:06 +0100, Jérôme M. Berger <jeberger at free.fr>
wrote:
> Regan Heath wrote:
>> Or, perhaps another way to ask a similar W is.. can the compiler
>> statically verify that a create-set-call style object has been
>> initialised, or rather that an attempt has at least been made to
>> initialise all the required parts.
>>
> Here's a way to do it in Scala:
> http://blog.rafaelferreira.net/2008/07/type-safe-builder-pattern-in-scala.html
I saw the builder pattern mentioned in the original thread..
> Basically, the builder object is a generic that has a boolean
> parameter for each mandatory parameter. Setting a parameter casts
> the builder object to the same generic with the corresponding
> boolean set to true. And the "build" method is only available when
> the type system recognizes that all the booleans are true.
But I hadn't realised it could enforce things statically, this is a cool
idea.
> Note however that this will not work if you try to mutate the
> builder instance. IOW, this will work (assuming you only need to
> specify foo and bar):
>
>> auto instance = builder().withFoo (1).withBar ("abc").build();
This looks like good D style, to me, in keeping with the UFCS chains etc.
> but this won't work:
>
>> auto b = builder();
>> b.withFoo (1);
>> b.withBar ("abc");
>> auto instance = b.build();
But, you could create a separate variable for each with, couldn't you - v/
inefficient, but possible. I don't think this syntax/style is a
requirement, and I prefer the chain style above it.
> Something similar should be doable in D (although I'm a bit afraid
> of the template bloat it might create…)
Indeed. The issue I have with the builder is the requirement for more
classes/templates/etc in addition to the original objects. D could likely
define them in the standard library, but as you say there would be
template bloat.
R
--
Using Opera's revolutionary email client: http://www.opera.com/mail/
More information about the Digitalmars-d
mailing list