Templates: generic "return null;"
Chris
wendlec at tcd.ie
Mon Feb 3 02:55:22 PST 2014
On Monday, 3 February 2014 at 10:32:58 UTC, Stanislav Blinov
wrote:
> On Monday, 3 February 2014 at 10:25:19 UTC, Chris wrote:
>
>> T[T] attributes;
>> // ....
>> public auto getAttribute(T attr) {
>> if (!(attr in attributes)) {
>> return null; // Doesn't work for numbers!
>> }
>> return attributes[attr];
>> }
>> }
>
> One way would be to use std.typecons.Nullable(T) as a return
> type.
Thanks. I'll try this one.
> Another would be to retink your design :) Note that for
> numbers, there's no distinct "does not exist" value (well, ok,
> we have NaN for floating point). Neither there is for structs.
> Generally such methods as your getAttribute either throw, or
> get a second optional parameter as hint on what to return when
> the element is not found in the dictionoary.
I'm reluctant to (over)use throw, because I think that throw
should be the last resort when you cannot easily predict all the
things that can go wrong. Simple requests should give simple
answers. If the key doesn't exist it returns nothing.
The problem above only exists because of generic types, else it
would be either 'null' or for numbers -1 or something. But if you
have a good point I've overlooked, you can convince me of throw.
No ideology :)
More information about the Digitalmars-d-learn
mailing list