(non)nullable types
Nick Sabalausky
a at a.a
Fri Feb 13 10:43:22 PST 2009
"Christopher Wright" <dhasenan at gmail.com> wrote in message
news:gn3os2$f6j$3 at digitalmars.com...
> Nick Sabalausky wrote:
>> "Brian" <digitalmars at brianguertin.com> wrote in message
>> news:gn3dfn$2lp3$1 at digitalmars.com...
>>> On Thu, 12 Feb 2009 08:41:54 -0500, Christopher Wright wrote:
>>>> Brian mentioned having to check if the variable is null before using
>>>> it.
>>>> This would not be easy to implement, and it might be a bit hard to use.
>>>> Again, I'd have to see it in use.
>>> after a bit of thought i dont think theres much/any benefit of forcing a
>>> check. if nonnullable was the default then using a nullable version is
>>> expected to be unusual and potentially unsafe.
>>
>> I don't see much of a point in not forcing a check. I can't think of a
>> case where it would be useful or desirable to use a nullable type without
>> first checking for null (except for passing it to a func that takes a
>> nullable as a param or assigning it to another nullable of the same type,
>> but presumably the check wouldn't be required in those cases). So it may
>> as well be forced (when dereferencing and converting to non-nullable),
>> since you'd never really want/need to do otherwise.
>>
>> Even if the compiler simplified the process by only accepting the exact
>> pattern of "if(x !is null)...", and didn't do any fancier analysis than
>> that, I would still consider that accptable since, as you said, it would
>> be a non-standard use. So therefore, a (very) minor inconvenience like
>> that would be acceptable, particularly considering it would essentially
>> guarantee no null reference errors (aside from manual use of pointers, of
>> course).
>
> The primary use case would be:
> nullable T y = something;
> non_nullable T x;
> if (y) x = non_nullable_cast(y); else return;
>
> This is a problem if T cannot be allocated by default. I have to do
> something like:
> nullable T y = something;
> if (!y) return;
> auto x = non_nullable_cast(y);
>
> That isn't so bad.
I still like this that someone else mentioned:
T? x = something;
if(x !is null)
{
// x is implicitly "T" here, not "T?"
}
else
{
// handle null condition (x is still "T?")
}
More information about the Digitalmars-d
mailing list