std.string and std.algorithm: what to do?

Steven Schveighoffer schveiguy at yahoo.com
Thu May 14 08:11:14 PDT 2009


On Thu, 14 May 2009 11:06:44 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> Daniel Keep wrote:
>>  Steven Schveighoffer wrote:
>>> On Thu, 14 May 2009 09:55:08 -0400, Andrei Alexandrescu
>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>
>>>> Also, I dislike the signature int find() that returns -1 if not found.
>>>> Time and again experience shows that find() returning a range is much
>>>> better in real code because it works seamlessly when the
>>>> substring/element was not found (no more need for an extra test!)
>>> Ech, returning -1 is the bane of Java and C#.  The return value should
>>> be the end of the string, regardless of whether it is a range or  
>>> index. I could never understand the mentality of returning -1 versus  
>>> end of
>>> string.
>>>
>>> -Steve
>>  int idx = find(str);
>> if( idx == -1 ) doStuff;
>>  - or -
>>  if( idx == str.length ) doStuff;
>
> I think Steve's point is that often you want to do something like:
>
> auto before = str[0 .. find(str, something)];
>
> or
>
> auto after = str[find(str, something) .. $];
>
> which behave nicely at limit conditions (when something isn't found). In  
> contrast, the version with -1 needs a separate varible and a test - a  
> mess.

Yes, and to Daniels point, I don't see a drawback.  Typing str.length vs  
-1 is really not that bad :)

-Steve



More information about the Digitalmars-d mailing list