Am Mon, 16 Dec 2013 14:59:43 -0800 schrieb Andrei Alexandrescu <[email protected]>:
> On 12/16/13 2:38 PM, Andrej Mitrovic wrote: > > On 12/16/13, Andrei Alexandrescu <[email protected]> wrote: > >> There's quite a bit of evidence in support of among (not as much for > >> between) in the source code of Facebook's cpplint, soon to be open > >> sourced. Here are some relevant quotes: > > > >>From first glance it seems you're always using among when needing a > > boolean result, so why does among have to return an index instead of a > > boolean true/false? > > More info is better than less info, especially if it comes for free. We > already use this idiom in a couple of places in Phobos. > > Andrei I've always preferred findCharInString() to return the "end" of the string in case the char isn't found instead of e.g. -1, for two reasons: a) With an index to the end (equal to the length) you can do more useful stuff like: auto idx = findCharInString(' ', str); str = str[idx .. $]; -1 requires an explicit if()-branch in any case. auto idx = findCharInString(' ', str); if (idx == -1) { str = "" } else { str = str[idx .. $]; } b) The index becomes size_t again, which is the correct type. Now similarly I would prefer if among() could do anything else but shift indexes by +1. Indexes in D are 0 based. Since we are talking about a verbatim set of options here instead of a linear string, I could live with -1 as "not in list" and a zero based index, but then among would have to be renamed to something that doesn't imply a result that converts to boolean. "optionIndex" or something. -- Marco
