numericValue for (unicode) characters

monarch_dodra monarchdodra at gmail.com
Wed Jan 2 14:15:31 PST 2013


On Wednesday, 2 January 2013 at 20:49:38 UTC, Dmitry Olshansky 
wrote:
>
> Yup, and it's 2 lines then. And if one really wants to chain it:
> map(a => enforce(std.ascii.isNumeric(a)), a -= '0')(...);
>
> Hardly makes it Phobos candidate then ;)

Well, just because its almost trivial to us doesn't mean it hurts 
to have it. The fact that you can even operate on chars in such a 
fashion (c - '0') is not obvious to everyone: I've seen time and 
time again code such as:
//----
if (97 <= c && c <= 122)
     c -= 97;
//----

numericValue helps keep things clean and self documented.

What's more, it helps keep ascii complete. Code originally 
written for ascii is easily upgreable to support uni (and 
vice-versa). Further more, *writing* "std.ascii.numericValue" 
self documents ascii only support, which is less obvious than 
code using "c - '0'":

In the original pull request to "improve" conv.to, the fact that 
it did not support unicode didn't even cross our minds. Seeing 
"std.ascii.numericValue" raises the eyebrow. It *forces* unicode 
consideration (regardless of which is right, it can't be ignored).

Really, by the rationale of "it's 2 lines", we shouldn't even 
have "std.ascii.isNumeric" at all...

On Wednesday, 2 January 2013 at 20:13:32 UTC, Dmitry Olshansky 
wrote:
> 1/2/2013 7:24 PM, bearophile пишет:
>> There is also std.typecons.nullable, it's a possibility for
>> std.uni.numericValue. Generally Phobos should eat more of its 
>> dog food :-)
>>
>
> double.nan sounds more like it.

Hum... nan. I like it.


More information about the Digitalmars-d mailing list