(non)nullable types

Christopher Wright dhasenan at gmail.com
Fri Feb 13 04:25:38 PST 2009


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.



More information about the Digitalmars-d mailing list