Allen Wirfs-Brock wrote:
On Nov 2, 2012, at 10:56 AM, Jason Orendorff wrote:
On Fri, Nov 2, 2012 at 12:29 PM, Domenic Denicola
<dome...@domenicdenicola.com <mailto:dome...@domenicdenicola.com>> wrote:
> If we call it "has", should we also rename
String.prototype.contains?
I'd say no; the distinction between collections "having" an
element and strings "containing" a substring seems very sensible.
It's a bit more awkward to say a string "has" a substring, and a
string is definitely not a collection of substrings in any
reasonable sense.
Well, you could also note that array.has(x) looks for a particular
value, while map.has(x) looks for a particular key.
But that's not the point. There's no common formal contract
implemented by all these methods; what they share is an informal
"hey, look in this thing, and tell me if you see that thing" vibe.
There is no verifiable formal contract. But there can be an informal
contract. In my experience, it is very important when using a dynamic
language to recognize and try to support such informal contracts.
All the uses of "has" we have defined so far are about the "keys".
Having one place that is about the "values" to create unnecessary
confusion
Note that we (the JS/ES designers) already have a history of being
being inconsistent in our use of names. Consider String indexOf and
Array indexOf
http://stackoverflow.com/questions/4962361/where-is-javas-array-indexof
they are named the same and appear to have signatures. But they
logically are doing quite different things. String indexOf is looking
for the index of the first element of a subsequence of character
elements that matches a specific character sequence. Array indexOf is
looking for the index of a single element that contains a specific
value. You might want to implement a logically similar subsequence
search for Array's but if you do, you can't call it indexOf because
that name was already used for something with different semantics. We
should try to do better as people for our example.
That one never bugged me, and I suppose one could "fix" it by allowing
by-value search for a sub-array from Array.prototype.indexOf. I've never
seen anyone do that.
"has" for keys (and possibly values of a Set, to preserve the value
mapped to boolean future option that forEach also supports), "contains"
for values in arrays?
/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss