Optional<T> equivalent in D?

Jonathan M Davis jmdavisProg at gmx.com
Fri Nov 15 21:04:20 PST 2013


On Friday, November 15, 2013 23:39:38 Jacek Furmankiewicz wrote:
> Many other languages are starting to frown on returning null
> values from methods (due to NullPointerException risks, etc) and
> wrapping them instead in an Optional<T> like in
> 
> Scala:
> http://blog.danielwellman.com/2008/03/using-scalas-op.html
> 
> Google Guava for Java: (now rolled into the base JDK for Java 8):
> https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained

I really don't understand this. Optional<T> is one of the most useless ideas 
that I've ever seen in Java. Just use null. It's built into the language. It 
works just fine. And wrapping it in a class isn't going to make it go away. 
Just learn to deal with null properly. I've known many programmers who have no 
problems with null whatsoever, and I'd be worried about any programmer who is 
so scared of it that they feel the need to wrap nullable objects in another 
type which has its own concept of null.

The only types which aren't nullable in Java are the primitive types, and if 
you use them in generics (like Optional<T> does), then you get a class that 
boxes the primitive type rather than using the primitive type directly, and 
that object is of course nullable. So, you might as well just use the class 
that boxes the primitive type directly and set its reference to null when you 
need it to be null. And Optional<T> doesn't even protect against null, since 
it's perfectly possible to make its contents null. So, as far as I can see, 
Optional<T> is utterly pointless. IMHO, it's outright bad software design.

> Is there a similar approach in D? Or maybe an equivalent is in a
> commonly used external library?

We have std.typecons.Nullable. However, it's real value is in making it 
possible to have value types be null. I very much hope that no one is using it 
like Optional<T> to set nullable types to null without actually using null. 
The _only_ nullable type in D that I would consider reasonable to use with 
Nullable would be arrays, and that's because of how null arrays aren't 
properly distinguishable from empty arrays, making using "is null" with them a 
bit iffy.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list