Nullable or Optional? Or something else?

Rainer Deyke rainerd at eldwood.com
Tue Sep 8 16:24:31 PDT 2009


Steven Schveighoffer wrote:
> On Tue, 08 Sep 2009 15:50:15 -0400, Rainer Deyke <rainerd at eldwood.com>
> wrote:
>> Yes, in this particular case, passing a default value would work just as
>> well.  But what if you want to cache the contents of the entire
>> configuration file?  What if calculating the default value is an
>> expensive operation that should be avoided if possible?
> 
> You're reaching here :)  A default configuration value that is expensive
> to calculate?

New example:

struct AlgebraicFunction {
  double getMaximum() {
    if (isNull(this.cachedMaximum)) {
      this.cachedMaximum = this.veryExpensiveCalculation();
    }
    return *this.cachedMaximum;
  }

  private Optional!(Optional!double) cached_maximum;
}

> I understand what you are saying, but often times (as I have learned
> from my own crusades on the NG), when it is hard to find good cases for
> an argument, it means the argument is superficial or academic.  I could
> very well be wrong, but to me, the practicality of the offered use cases
> is important when evaluating whether to complicate syntax.

I think it's much more important to have clear consistent semantics than
convenient syntactic shortcuts.  I don't want D to turn into Perl.

> I thought it was to provide a way to make a value type have an "unset"
> value.

The point is to have a type that can represent all possible values of T,
plus an additional singular value, for all possible types of T.

>> You can't have that, because 'v' is already the container.  The best you
>> can get is a proxy that sometimes acts like a containee, but really
>> isn't.  This kind of sloppy thinking has no place in computer
>> programming.
> 
> You mean like struct pointers? Generic type wrappers?  Remote object
> proxies? :P

These examples of proxies are also a bad idea.  When I want to access a
member of a struct through a pointer, I use '(*p).x'.


-- 
Rainer Deyke - rainerd at eldwood.com



More information about the Digitalmars-d mailing list