On Monday, 14 May 2012 at 10:31:47 UTC, Simen Kjaeraas wrote:
On Mon, 14 May 2012 12:01:06 +0200, Peter Alexander <peter.alexander...@gmail.com> wrote:

On Sunday, 13 May 2012 at 10:08:47 UTC, bearophile wrote:
Andrei Alexandrescu:

assumeSorted(range).contains(object)

is still one line, safer, and IMHO more self-explanatory.

It's self-explanatory if the name there contains something like
"binarySearch". Otherwise it is NOT self-explanatory, I can't
assume it will use a binary search.
So it's surely not intuitive.

Bye,
bearophile

100% agree with this.

How anyone can possibly think that using assumeSorted(r).contains(x) to do a binary search is more self-explanatory than just writing binarySearch(r, x) is beyond me. It's mind-boggling.

It is not intuitive, I agree. It is, however, documenting. You're not calling binarySearch on any old array, you assume it is sorted, *then*
search it.

Perhaps it would be better to have a binarySearch function, which can only take a SortedRange, and gives an explanatory error message when used
with a NonSortedRange.

How about users who don't know what binary search is. binary search is an intuitive concept for people who have good programming experience but assumeSorted(r).contains(x) is more intuitive to higher level users. see how many searches you get with binary search on google and how many with contains and sorted. I'm not a developer, I do quantum chemistry and write based on formulas and algorithms in papers, not on libraries. I would prefer people to write code in more general concepts so it's easier for me to understand and learn. And if you know binary search, it's not that much harder to change your style to assumeSorted(r).contains(x); in comparison, to a newbie learning binary search. Also having multiple ways of doing the same thing makes usage more confusing, so it should be avoided unless really needed.
So in short, I support that Andrei aims for larger audience.

Reply via email to